Một vài “sự thật” về việc lập trình

 Phải nói rằng công việc của developer chúng ta là một trong những công việc bí ẩn, “nguy hiểm” nhất thế giới. Ai cũng biết một anh thợ điện thì hay leo cột điện, một anh thợ sửa ống nước thì hay vào nhà mấy chị gái để thông ống, nhưng một thằng developer thì chính xác là nó làm gì? À, nghe bảo là nó lập trình.

Thuở hàn vi, khi mới bắt đầu theo học ngành này, thậm chí là đến năm 2 đại học mình vẫn chưa biết lập trình thật sự là làm cái gì. Dẫn đến mình có rất nhiều ngộ nhận, mình tin rằng mấy đứa xung quanh mình thời điểm đó cũng thế. Vì thế hôm nay mình sẽ bật mí cho các bạn một vài sự thật về việc lập trình mà mình đã rút ra được qua vài năm lăn lộn, đặc biệt là cho các bạn mới nhé.

0. Toán học và lập trình

Mình đã nghe, đọc ở đâu đó về nhận định này từ hồi cấp 3, rằng muốn lập trình giỏi bạn cần cực kì giỏi toán. Lên đại học, trước khi học lập trình mình đã được học các môn về toán như: toán cao cấp 1, 2, đại số tuyến tính, toán rời rạc… Phải chăng chúng ta cần thật sự giỏi toán để có thể code giỏi?



Câu trả lời là: nó còn tùy. Tùy thuộc vào chuyên ngành, hướng đi mà bạn chọn.

Giả sử như bạn muốn làm game 2d, game 3d, các thể loại game liên quan đến hình ảnh nhiều chiều, chuyển động, rõ ràng bạn cần nắm các kiến thức về toán học để có thể tính toán tọa độ, khung hình cho các đối tượng trong game. Hoặc là bạn muốn làm việc thiên về nghiên cứu, các lĩnh vực như trí tuệ nhân tạo, deep learning…, rõ ràng là bạn cần kiến thức chuyên sâu về toán học để có thể giải quyết các vấn đề.

Nhưng nếu bạn đi theo hướng “bình thường”, bạn muốn làm web, làm ứng dụng di động…, thì mình có thể khẳng định rằng bạn không cần giỏi toán. Không cần giỏi toán ở đây có nghĩa là bạn không cần giỏi về nhị thức newton, tích phân mở rộng, nguyên hàm gì gì đấy mình không nhớ, nói chung là các kiến thức toán chuyên sâu. Thứ duy nhất về toán bạn cần giỏi là toán logic, dùng để phân tích, mổ xẻ vấn đề khi bạn lập trình.

Tất nhiên cũng còn tùy vào loại dự án mà bạn tham gia. Vừa rồi mình có làm một trang web giúp trẻ em học toán thông qua hình ảnh, trong đó có một số chỗ áp dụng các kiến thức về đường tròn, ellipse để vẽ ra các hình ảnh, cuối cùng mình mất cả đêm vẫn chưa thể làm xong vì mình không thể nhớ tan=sin/cos.

Thế đấy, tất cả mọi thứ đều liên quan đến chữ “tùy”, tuy nhiên, nếu bạn không tập trung vào những ngóc ngách đặc biệt của ngành lập trình thì đừng quá lo lắng về kiến thức toán học nhé.

1. Lập trình == gõ phím?

Một developer dùng phần lớn thời gian để gõ code?

Nghe có vẻ hợp lý, developer không code thì làm gì nữa? Qua đôi ba năm cày ải mình nhận ra nhận định này có vẻ không đúng lắm.

Những ngày đầu tiên mình đi làm, mình thường quan sát các anh senior xung quanh xem họ làm việc như thế nào. Lạ ở chỗ là mình thấy họ không tập trung code mà cứ ngồi vẽ vẽ, viết viết gì đấy giống như là viết văn.

Tại sao lại như vậy? Tại sao senior trình code cao lại không code nhiều? Lý do là bởi lập trình không phải là gõ phím, để lập trình hiệu quả, bạn cần dành thời gian phân tích yêu cầu, suy nghĩ hướng làm, research hướng làm hiệu quả, đôi lúc là phác họa luồng chạy của code… Viết code gần như là một trong những bước cuối cùng của quá trình lập trình.

Thế nhé, chỉ mấy đứa gà mới code như một cái máy thôi.

2. Biết nhiều ngôn ngữ, công nghệ == code giỏi?

Đây là một trong những nhận định sai lầm nhất về lập trình, các bạn mới học rất dễ ngộ nhận điều này, đặc biệt là các anh chàng mới lớn.

Ngày xưa mấy đứa bạn mình trong trường hay bàn tán về một thằng tên S: “ôi thằng S nó biết PHP, C#”, “ôi thằng S nó biết cả Nodejs”, “ôi nó lại còn biết cả Java nữa”. Cuối cùng S được gọi là “S master“. S cũng tưởng mình master thật, ra oai ghê lắm. Thằng S này ngày càng cố gắng học nhiều ngôn ngữ mới vì nó nghĩ biết nhiều ngôn ngữ đồng nghĩa với code giỏi, đồng nghĩa với master.

Lúc đấy mình cũng nghĩ giống như thằng S kia, cũng muốn được như nó lắm. Nhưng không lâu sau thì nghe bảo S vào một công ty nọ bị hành ghê lắm, nó chẳng làm được gì với đống ngôn ngữ nó học cả. Bởi vì mấy cái trong thực tế cái nào cũng phức tạp, rối rắm, S thì chỉ biết code ứng dụng CRUD (ứng dụng thêm xóa sửa). Thế là mình thôi không bắt chước thằng S master nữa.

Sau này thằng S nó nói với mình là nó nhận ra rằng, hóa ra không phải cứ biết nhiều ngôn ngữ, công nghệ thì sẽ đồng nghĩa với code giỏi. Hóa ra kĩ năng giải quyết vấn đề, phân tích chương trình, thiết kế chương trình, clean code, kinh nghiệm… mới là những vũ khí tối thượng.

3. Cần nhớ mọi thứ để có thể lập trình?

Bắt đầu từ năm 2 đại học mình bắt đầu được học một loạt các kiến thức mới. Nào là các kĩ thuật lập trình như kĩ thuật vét cạn, quay lui…, các loại giải thuật khác nhau như: search, sort… Nói chung là rất nhiều thứ cần nhớ. Vậy chúng ta có cần nhớ hết mọi thứ đã được học hay không?

Câu trả lời là không. Không ai có thể nhớ hết mọi thứ được. Mình đã từng cố gắng nhớ hết gần chục cái thuật toán sort, cuối cùng sau vài tháng mình đã quên hơn một nửa.

Ngày nay chúng ta may mắn có internet, mọi thứ đều có thể được tìm kiếm dễ dàng. Vì vậy bạn có thể sử dụng internet như một bộ nhớ ngoài để lưu trữ những thông tin ít quan trọng hơn. Chúng ta chỉ nên sử dụng hàng xịn để lưu những thông tin quan trọng nhất mà thôi.

Cái gì search cũng có thì không cần học nữa hay sao? Không, có một thứ bạn không thể search đó là kĩ năng. Kĩ năng là một trong những thứ quan trọng cần dùng não để lưu. Giả sử như bạn đã code, rèn luyện rất nhiều các thuật toán search khác nhau, như vậy là bạn đã có kĩ năng với các thuật toán search. Sau này mặc dù bạn đã quên đi cách search cụ thể cho từng thuật toán nhưng kĩ năng thì vẫn còn đó, bạn có thể dễ dàng tìm kiếm google và học lại nhanh chóng.

Để có thể lập trình hiệu quả, bạn cần hiểu, nhớ mọi thứ ở mức trừu tượng nhất. Giả sử như bạn học lập trình kết nối cơ sở dữ liệu với C#, bạn không cần nhớ cụ thể cú pháp, syntax như thế nào, cái bạn cần nhớ là cơ chế hoạt động của nó, khi nào thì nên sử dụng… Có những thứ bạn chỉ cần nhớ rằng nó có tồn tại trên đời là đủ, khi gặp các bài toán cụ thể chúng ta sẽ tìm hiểu sâu hơn về nó sau.

Tóm lại, cái bạn cần nhớ là hệ thống kiến thức, liên kết giữa các mảng kiến thức, kĩ năng (thông qua rèn luyện).

4. Kĩ năng tìm kiếm thông tin vô cùng quan trọng

Như mình nói ở trên, bạn không thể nhớ mọi thứ được. Vì vậy kĩ năng tìm kiếm thông tin là kĩ năng quan trọng mà bạn cần giỏi để có thể lập trình.

Kĩ năng tìm kiếm thông tin là gì? Là kĩ năng google, đôi khi còn là kĩ năng đi hỏi người khác sao cho không bị chửi.

Google thì cứ thế search thôi chứ cần gì kĩ năng? Không đúng, cùng 2 đứa search một vấn đề nhưng đứa có kĩ năng sẽ ra ngay, đứa không có kĩ năng có thể mất cả ngày vẫn không ra. Kĩ năng sẽ giúp bạn chọn keyword phù hợp cho từng vấn đề, đôi khi chỉ cần đúng keyword là vấn đề sẽ được giải quyết.

Ngoài ra, để có thể tìm kiếm thông tin phù hợp, nhanh chóng, bạn cần có một hệ thống kiến thức rộng lớn trong đầu, đó là những thứ mà mình đã nói chúng ta cần nhớ ở phần trên. Tưởng tượng bạn cần tìm kiếm một viên ngọc màu đen nằm sâu trong lòng đại dương. Một gã thất phu sẽ nhảy ngay ra lòng biển để tìm kiếm một cách vô vọng, người có kiến thức trong đầu sẽ biết được ngọc màu đen sẽ nằm ở Thái Bình Dương, ngọc màu đỏ sẽ nằm ở Đại Tây Dương. Vậy ai sẽ là người tìm kiếm hiệu quả hơn?

Kĩ năng tìm kiếm thông tin = Kĩ năng tìm kiếm + hệ thống kiến thức.

Kết

Bạn còn biết “sự thật” vào nữa không? Chia sẻ với mọi người nhé.

#ntechdevelopers

Ntech Developers

Programs must be written for people to read, and only incidentally for machines to execute.

Post a Comment

Previous Post Next Post