02/10/2018, 13:58

Học lập trình có cần quá thông minh?

MR. ROBOT -- Season:2 -- Pictured: Rami Malek as Eliot Alderson -- (Photo by: Nadav Kander/USA Network) Như tiêu đề, một vấn đề nan giải và cũng là câu hỏi của nhiều người mới bước chân vào học lập trình. Có nhất thiết bạn cần phải quá thông minh để có thể học lập trình? Câu trả lời là ...

MR. ROBOT -- Season:2 -- Pictured: Rami Malek as Eliot Alderson -- (Photo by: Nadav Kander/USA Network)

Như tiêu đề, một vấn đề nan giải và cũng là câu hỏi của nhiều người mới bước chân vào học lập trình. Có nhất thiết bạn cần phải quá thông minh để có thể học lập trình? Câu trả lời là “Hoàn toàn không!”. Nguyên nhân vì sao thì hãy cùng nhau đọc tiếp bên dưới.

Theo mình tìm hiểu thì cho đến nay trong ngành lập trình không có khái niệm nào nói rằng người học phải đạt được sự thông minh ở cấp độ nào thì mới có thể hiểu được. Để học lập trình thì chỉ cần bạn là một người bình thường (IQ >= 85), có một chiếc máy tính (kết nối mạng càng tốt), một vài cuốn sách và một quyết tâm sắt đá.

Có phải đơn giản quá không, thực sự là không đơn giản vậy. Nói ngắn gọn để cho các bạn khỏi hoang mang chứ học lập trình thì cũng có những cái khó của nó. Đầu tiên hãy tìm hiểu vì sao bạn thấy nó khó.

Những điều cản trở bạn học lập trình

Lập trình thật là khô khan và khó hiểu

Mình chắc có tới 96,69% các bạn mới tiếp xúc với ngôn ngữ lập trình sẽ thấy tá hỏa khi đọc một file code chứa khoảng vài trăm dòng trở lên (bản thân mình cũng vậy). Thật dễ hiểu là vì sao mấy bạn sợ, đó là vì bạn chưa quen, chưa hiểu từng thành phần của thứ bạn đang đọc, hoặc chưa hiểu được luồng, quy tắc đặt tên, quy tắc gọi hàm,… nên không thể hiểu hết được code viết để làm gì, chạy ra làm sao. Từ đó cảm giác sợ hãi sẽ xâm lấn khiến cho bạn nản và suy nghĩ rằng bạn không có khả năng học lập trình.

Kể một kỷ niệm nho nhỏ của mình vào năm 2015, có đi phỏng vấn vị trí back-end developer tại một công ty game, bị đưa optimize một file code đâu đến hơn 300 dòng (cũng không nhớ chính xác). Mà lúc đó ngáo ngơ mới ra trường, cũng chưa có kinh nghiệm gì nhiều nên rất choáng khi đụng phải mớ hỗn độn như vậy, cuối cùng mình bỏ bài đó và kết quả thì mấy bạn biết rồi đó. Điều đó sẽ không có gì to tát, rớt thì về học lại thôi, nhưng khi về nhà mình ngồi suy nghĩ lại, hiểu được và cũng thấy được cái chỗ cần optimize đó. Có lẽ lúc đó quá áp lực về tâm lý khi lần đầu tiên thấy nhiều code đến vậy!

afraid-code

Tôi đã từng một thời sợ code

Các thuật toán phức tạp cần người thông minh để giải quyết

Không biết từ bao giờ, nhưng khi nói về các giải thuật thì người ta đều nghĩ ngay đến những lập trình viên với bộ óc siêu phàm. Đừng thần thánh hóa vậy, vì bản thân mình thấy được rằng các giải thuật thường dùng thì không cần đến những bộ óc phải thật xuất sắc mới có thể hiểu được, học ngu như mình cũng đọc và cũng hiểu mà. Tất nhiên sự thông minh sẽ giúp bạn đọc, hiểu và nắm bắt vấn đề nhanh hơn người khác, nhưng đó không phải vấn đề quan trọng nhất, vấn đề thật sự là bạn có muốn hiểu nó không, có quyết tâm đi đến cùng khi gặp khó khăn không? Lúc gặp khó khăn thì bạn làm gì?

Bản thân những người lập trình giỏi không giỏi ngay từ lúc ban đầu, nhưng họ khác biệt bằng thái độ làm việc và suy nghĩ tích cực cộng với sự chăm chỉ không gì sánh nổi.

Malcolm Gladwell nói “Để trở thành chuyên gia trong một lĩnh vực nào đó cần tới 10.000 giờ thực hành”. Vậy bạn đã thực hành bao nhiêu giờ rồi?

Một người anh đã từng chia sẻ với mình rằng: “Khi gặp một khó khăn nếu bạn nói không thể thì nó mãi mãi là không thể, nhưng nếu bạn nói có thể thì cơ hội, cơ may thành công chắc chắn sẽ lớn hơn khi nói không. Đó có lẽ là câu nói hay nhất mình từng được nghe.

Bạn không tin vào chính con người mình

Đây chính là điều quan trọng nhất giết chết bạn. Mình từng có một thời gian trầy trật với môn lập trình căn bản, có thể vì thời gian đầu khi mới tiếp xúc mình đã đi không đúng cách nên rất khó nuốt mớ kiến thức đó. Nhưng nếu ngay tại thời điểm đó tự chọn cách từ bỏ và phó mặc số phận thì bây giờ đã không thể ngồi đây viết bài chia sẻ, và tất nhiên mình cũng không thể trở thành một lập trình viên… ahihi. Mỗi người sinh ra không ai giống ai cả, và cũng không ai biết được khả năng tiềm tàng trong mỗi chúng ta cho đến lúc bạn làm cho nó bộc phát.

Niềm tin chính là thứ khiến mọi việc dễ dàng hơn rất nhiều, nếu muốn trở thành một người lập trình viên giỏi thì bước đầu tiên phải làm là tin điều đó, là bạn chắc chắn sẽ làm được. Sau đó thì bước những bước đi vững vàng kế tiếp.

Nói rất tốt! Thế bây giờ thì phải làm sao?

Tìm kiếm một nguồn động lực

Động lực thì mỗi người mỗi khác, nhưng thôi để mình kể một câu chuyện điển hình về chuyện tình cay đắng của thằng bạn mình.

Hồi xưa mình có thằng bạn tên (tạm gọi nó là A) sống trong khu chung cư tráng lệ mới xây bên bờ sông Sài Gòn. Đối diện nhà A có em hàng xóm rất là xinh đẹp cùng tuổi tên là B. Hàng ngày A nhìn thấy B với da thịt đầy đặn phô ra trước nhà thì trong lòng vô cùng hoan hỉ và đêm về tốn không biết bao nhiêu là giấy (A chỉ dùng An An và Sài Gòn Extra). Nhưng một hôm thằng A đang nhìn trộm em B thì để ý thấy thằng C nhà bên cạnh cũng đang làm cái hành động y chang mình. A biết rằng B không thể thuộc về mình nếu có cảm tình với C nên cố gắng suy nghĩ cách để lấy lòng em nó. Với niềm tin sắt đá, A quyết tâm học lập trình để làm cho B một website khoe hình ảnh đú đỡn của em ấy và tất nhiên cũng để chiếm trọn lấy tình cảm của em.

Nhưng lập trình không dễ như A tưởng. Lúc mới tiếp cận với ngôn ngữ lập trình thì A luôn bị nhức đầu và buồn ngủ. Nhưng vì muốn chén được con B ngon và múp này, A không thể bỏ cuộc như thế được. Thay vì ngồi học theo các tuts chia sẻ nhan nhản trên mạng, A quyết tâm lập ra con đường sự nghiệp cua gái cho mình mà điển hình là học một ngôn ngữ từ bước cơ bản nhất. Sau vài lần tiếp xúc A quyết tâm chọn PHP để làm nền tảng. Dần dần website khoe hình của A hoàn thiện và chạy mượt mà, nó vội vàng khoe với em B. Sau một hồi nhìn tới ngó lui upload vài hình thử nghiệm thì em B lại muốn phải có thêm chức năng phóng to thu nhỏ để có thể xem rõ hơn những vùng …. nhạy cảm.

Biết giới hạn trình độ của mình, và cũng không muốn làm em B giận. A cày ngày cày đêm học hỏi, mò mẫm kiến thức trên mạng để làm cho xong những chức năng mà em ấy yêu cầu. Ông trời không phụ lòng người, sau vài lần xong trước tiến độ, cái website khoe ảnh nude của em B đã hoàn thiện. Tuy nhiên chỉ sau vài tháng chạy thử với số lượng người truy cập quá đông nên website bị sập và A nghiễm nhiên trở thành một người bạn thân, một người anh trai tốt của em B mà chưa kịp nói lời tỏ tình.

Đấy các bạn thấy chưa, chỉ cần tin vào chính mình thì việc gì cũng có thể thành công. A đã tin vào bản thân, nói đúng hơn là A có động lực lớn để học tập.

Không ngừng thử thách bản thân

Hãy luôn thử thách bản thân khi học lập trình, ngày càng nâng cao skills của bản thân bằng cách học nhiều hơn, học tất cả những gì cảm thấy cần thiết. Tự tìm kiếm những vấn đề còn tồn tại của mình để khắc phục và phát triển. Cách mà mình hay dùng là tự làm những project nhỏ để nâng cao skills những lúc rảnh rỗi, ngoài ra lên mạng tìm đọc những bài viết hay ho của người khác và làm theo cũng là một cách tốt.

Nếu vẫn không biết cần học gì thì có thể đọc bài viết để lập trình được sau 1 năm.

Kết giao và học hỏi với người giỏi hơn mình

Nếu đi với một người giỏi hơn mình, không bao lâu sau mình cũng sẽ giỏi như người đó. Đó là một điều được rút ra bởi….. chủ nhân blog Jusfunny. Tất nhiên, nếu kết bạn với người ta mà chỉ chăm chăm để học hỏi, chỉ để tìm kiếm cái giá trị gì đó cho bản thân thì thật là bỉ ổi và vụ lợi, có ngày nó nổi giận quánh đập, xài xể thì lúc đó mình không chịu trách nhiệm. Hãy làm bạn tự nhiên nhất, thân thiện và chân thành với tất cả mọi người, giúp đỡ lẫn nhau hết sức có thể, học hỏi từ người khác rồi sẽ đến lúc bạn sẽ cùng trình độ với họ.

Mạnh dạn lên, hồi xưa mình toàn vậy! Gặp ai cũng xởi lởi nhảy vô làm quen này nọ đủ kiểu, trong công ty ai cũng biết mặt. Giữa giờ thì rủ nhau pha cà phê, lấy nước (công ty có hệ thống nước và cà phê), cuối tuần rủ nhậu với hy vọng ngày đêm là thu lại chút gì đó kiến thức gì đó. Cũng được một thời gian lên bờ xuống ruộng, hai bên có tình cảm lẫn nhau thì anh kia mới nhắn tin rủ vô hotel bắt pokemon gì đó quý hiếm lắm…. mọi chuyện diễn ra thế nào thì tự tưởng tượng đi, mỏi tay quá.

Lập trình viên giỏi ngoài biết code thì cần có thêm nhiều kỹ năng khác. Trong một team, bạn có thể code tốt nhưng chưa chắc người ta nể bạn, ngoài kỹ năng code bạn còn cần rất nhiều kỹ năng khác để người ta nể phục mình. Có lẽ vài bữa sẽ viết riêng một series bài viết “để trở thành một team member được mọi người nể phục” luôn cho nó máu.

Đừng quên giúp đỡ người mới khi đã có kiến thức

Người mới ở đây là lập trình viên mới vô nghề, có thể còn trinh đầu óc. Họ có thể thua bạn về kinh nghiệm và kiến thức. Nhưng chắc chắn họ sẽ có khá nhiều cái hay ho để học hỏi. Ngoài ra dạy lại cho người khác cũng là cách bị động để ta ôn lại kiến thức, khám phá ra những cái mới mà mình chưa có cơ hội đi sâu.

Đó là toàn bộ cách mà mình đang dùng, vì mình không được thông minh mà. Ít nhất là cho tới thời điểm này mình cảm thấy nó hiệu quả với bản thân và tất nhiên là sẽ tiếp tục cố gắng theo đuổi đến cùng ngành lập trình hay ho này.

Thực hành, thực hành và thực hành

Với mốc 10.000 giờ đã nói ở trên, ta cần tới 10 năm để thực hành với 3h/ngày trừ những ngày ốm đau, mệt mỏi vì con bồ có chồng, con vợ có bồ. Càng thực hành nhiều, bộ não sẽ quen dần với việc code mà không thấy sợ hãi. Nó sẽ suy nghĩ logic hơn, càng ngày càng biết được nhiều kiến thức hơn. Hãy thực hành hằng ngày nếu có thể, hãy tìm những vấn đề random và giải quyết nó theo cách của bạn, cố gắng càng nhanh càng tốt. Một khi đã thực hành nhiều, bạn sẽ tự tin vào đôi tay của mình và mọi khó khăn gặp phải cũng sẽ có hướng giải quyết.

Một số nguồn hay nên đọc lúc rảnh rỗi:

Codefights: quánh lộn với code, có một số bài toán lập trình khá chua đấy. Trang này dành để luyện não khá hay, bạn sẽ được code thi với máy. Giải quyết các bài toán do chương trình đưa ra, đặc biệt ở đây có khá nhiều công ty cho đề, nếu bạn giải quyết tốt thì có thể có cơ hội hợp tác với họ.

Quora: nơi rất nhiều người có đầu óc viết những bài viết chất lượng về đủ thứ chủ đề, trong đó có chủ đề về phần mềm và các thứ liên quan đến lập trình viên.

Medium: tương tự quora, được sáng lập bởi co-founder của mạng xã hội twitter.

Simple programmer: trang blog khá hay nói tất tần tật về lập trình, tuy nhiên chú ý một điều là mặc dù hay nhưng vẫn không qua Jusfunny, ahihi.

Stackoverflow: trang giải đáp về lập trình lớn nhất thế giới hiện nay, search bugs trên google chỉ ra trang này, SEO bá ghê.

Techtalk via justfunny

0