01/10/2018, 00:06

Ngành CNTT Việt Nam hình như đang đi theo một con đường kỳ lạ, rất nóng và ít bền vững

facebook.com

Nguyen Hien

Ngược dòng. Ngành CNTT Việt Nam hình như đang đi theo một con đường kỳ lạ, rất nóng và ít bền vững. Từ khi còn giảng dạy, đến giờ, tôi vẫn khuyên các bạn trẻ hơn rằng nên bắt đầu từ nền tảng căn...

Ngược dòng.
Ngành CNTT Việt Nam hình như đang đi theo một con đường kỳ lạ, rất nóng và ít bền vững.
Từ khi còn giảng dạy, đến giờ, tôi vẫn khuyên các bạn trẻ hơn rằng nên bắt đầu từ nền tảng căn bản: học ngôn ngữ trước khi học framework, học lập trình trước khi học công nghệ. Và tôi tin rằng đây là con đường phù hợp, bền vững; công nghệ thay đổi từng ngày và chúng ta không thể cứ chạy mãi từ nơi này sang nơi khác nếu thiếu nền tảng cơ bản.
Khi tìm đồng nghiệp, tôi cũng tư duy theo cách này. Song càng đi, tôi càng thấy mình ngược dòng với xu thế CNTT Việt Nam hiện nay.
Một câu hỏi được tôi đưa ra cho ứng viên là “Làm thế nào để sắp xếp 1 text file, gồm nhiều dòng, có dung lượng 2GB?”. Tôi nhận được câu từ chối trả lời nhã nhặn rằng: “Tôi không giỏi về thuật toán, và công ty cũng đang tìm iOS developer? Vậy hãy hỏi tôi những kiến thức về iOS.”.
Tôi đồng tình và đưa ra câu hỏi mới về iOS: “Bạn nhận được 1 text file từ vụ VN Airlines leak, gồm nhiều dòng, có dung lượng 2GB, và cần hiển thị thông tin đó trên 1 iOS app dưới dạng danh sách được sắp xếp theo alphabet để tiện tra cứu. Bạn sẽ làm thế nào?”

Thược Nguyễn viết 02:16 ngày 01/10/2018

đọc bài mới thấy thấm thía lời của đồng nghiệp(nay đã nghỉ việc chỗ em). Muốn lập trình khá thì chú cứ học CTDL & GT cho anh

Mai Anh Dũng viết 02:19 ngày 01/10/2018

Hoàn toàn đồng ý Có thời gian rỗi thì nên làm vài bài trên HackerRank hoặc các trang tương tự như leetcode hoặc geeksforgeeks để khỏi quên.

Quảng cáo:
Đạt cũng đang ôn lại CTDL & GT để dạy khóa học sắp tới.

Tao Không Ngu. viết 02:09 ngày 01/10/2018

Đó là hệ qủa của việt công nghệ phần mềm dựa trên framework. Khi mà không cần biết các cấu trúc cơ bản linklist hay các thuật toán xắp xếp mã hóa nén v.v.v… khi mà các nền tảng đã có đủ các thứ đó.
Và vói nó đủ để làm ra một sảm phẩm chạy được.
Quay lại bài toán 2G text. Anh chàng lập trình viên IOS đó đúng. với 2G không ai xử lý trên dtđ mà có 1 server riêng và anh ta chỉ làm nhiệm vụ là code giao diện code phần đọc ghi socket v.v.v… Anh ta làm tốt những cái đó vậy là đủ.
Còn việc nó chạy như nào thì anh ta không cần biết. Nó cũng phần nào phản anh thực tế 1 server phục vụ hàng nghì khách hàng.

Đào Ngọc An viết 02:17 ngày 01/10/2018

Thầy của em ( trường BKHN ) cũng nói " đến khi tôi thi lên tiến sĩ tôi vẫn toàn dùng nháp với bút chì. Toàn học thuật toán mà giờ vẫn đứng đây chém gió về công nghệ ầm ầm :)"

Minh Hoàng viết 02:08 ngày 01/10/2018

Cảm thấy yên lòng, toàn tập trung vào thuật toán, trong khi bạn bè thì gặp toàn nói về công.nghệ này nọ, có thời gian bí bách ko biết tập trung đúng hướng ko. Hôm nay bài này đang được share mạnh.

Nguyễn Đức Hoàng viết 02:08 ngày 01/10/2018

Nếu là python tôi sẽ duyệt từng dòng đối tượng File text. Sau đó append nó vào môt list mới. Dùng phương thức sort() để sắp xếp danh sách theo alphabet. Và dùng thuật toán tìm kiếm nhị phân để tìm kiếm đối tượng mong muốn.

Nguyễn Đức Hoàng viết 02:06 ngày 01/10/2018

Trái tim của lập trình là thuật toán - cách bạn giải quyết vấn đề. Và trái tim của mọi kiến thức - đó là kiến thức cơ bản. Mình luôn coi trọng 2 cái đó nhất trong quá trình tự học lập trình. Bạn chạy theo công nghệ thì bạn là một kẻ ngu ngốc vì công nghệ là thứ ra đời hàng ngày, một công nghệ có thể nhanh chóng trở lên lỗi thời. Nó chỉ là thứ công cụ giúp ích cho bạn trong từng giai đoạn. Còn cơ bản nó là nền tảng quan trọng nhất, nếu bạn nắm vững cơ bản thì bạn có thể học bất kì một công nghệ nào một cách nhanh nhất. Còn lập trình mà không biết chút gì về thuật toán thì bạn chỉ là một tay codder xoàng xĩnh đôi chút ý kiến bản thân

Thược Nguyễn viết 02:10 ngày 01/10/2018

rất chờ đợi và cũng đã hóng nó từ rất lâu rồi a ạ

Phan Hoàng viết 02:20 ngày 01/10/2018

iOS mình chạy giaỉ nén tầm 300MB lag lòi tôm luôn, lấy đâu ra mà xử lý 2GB. Ông tuyển dụng cũng hơi chém qúa hoặc chưa bao giờ làm app mobile.

anon52681320 viết 02:14 ngày 01/10/2018

Nếu tôi nói tôi phải xử lý ETL 1TB dữ liệu chỉ với 1 con job 4GB HeapMem thì bạn có tin không ?

Phan Hoàng viết 02:12 ngày 01/10/2018

Việc xử lý theo chunk thì cũng không phải là cái gì qúa ghê ghớm. Trước mình xử lý các file text với 1 vài TB dữ liệu, mỗi lần chỉ đọc khoảng vài trăm MB rồi save vào db thì không nói làm gì? (hoặc xử lý các file excel với vài trăm nghìn row, mỗi row khoảng 1 ngàn cột) Tuy nhiên, ở đây, bạn ngoài việc đọc / bóc tách ra, bạn còn phải sắp xếp theo alphabet nữa thì nó lại là chuyện khác nhé.

anon52681320 viết 02:17 ngày 01/10/2018

Việc xử lý theo chunk

mỗi lần chỉ đọc khoảng vài trăm MB rồi save

bài toán đã được giải rồi nhé

en.wikipedia.org

External sorting

External sorting is a class of sorting algorithms that can handle massive amounts of data. External sorting is required when the data being sorted do not fit into the main memory of a computing device (usually RAM) and instead they must reside in the slower external memory, usually a hard disk drive. Thus, external sorting algorithms are external memory algorithms and thus applicable in the external memory model of computation. External sorting algorithms generally fall into two types, distribu...


+
en.wikipedia.org

Merge sort

O(n log n) typical, In computer science, merge sort (also commonly spelled mergesort) is an efficient, general-purpose, comparison-based sorting algorithm. Most implementations produce a stable sort, which means that the implementation preserves the input order of equal elements in the sorted output. Merge sort is a divide and conquer algorithm that was invented by John von Neumann in 1945. A detailed description and analysis of bottom-up mergesort appeared in a report by Goldstine and von Neuma...

Phan Hoàng viết 02:10 ngày 01/10/2018

OK, giaỉ pháp mà bạn đưa ra có vẻ giaỉ quyết được vấn đề … nhưng chỉ ở học thuật mà thôi. Chứ bạn đã thử làm với app mobile chưa, tốc độ reponsive thế nào? Mình đồ rằng với con iPhone6s Plus 1GB RAM (riêng RAM dành cho OS đã tầm 700 MB rồi, cộng với con CPU 1.4GHz Dual-core), riêng việc đọc, merge, external sort, … thì có đến mùa quit nó mới sắp xếp xong.

Làm app thương mại, ngoài vấn đề giaỉ pháp ra còn 1 vấn đề nữa về trải nghiệm người dùng nữa nhé. Thế nên giaỉ pháp nó cũng phải hợp lý, chứ không phải cứ lý thuyết làm được rồi lao đầu vào làm.

Mai Anh Dũng viết 02:15 ngày 01/10/2018

Em nghĩ câu hỏi phỏng vấn không cần phải có một giải pháp hoàn hảo, cái quan trọng là interviewee show được kiến thức của họ. Cách giải quyết vấn đề thông qua cách họ phân tích câu hỏi, đưa ra giải pháp. Chứ không phải là “sorry, please ask other questions”

Ví dụ như Google hỏi cách reverse một binary tree. Hay viết lại hàm permutation. Hay thử implement smart pointer, share pointer trong C++. Hay implement lại hàm malloc,etc.

Các câu hỏi này chỉ mang tính kiểm tra kiến thức của lập trình viên thôi anh.

Trương Phước Hiệu viết 02:13 ngày 01/10/2018

chunk

Cho em hỏi mấy xử lý nặng kiểu này thì nên cho server xử lý rồi app kéo từ api về thôi đúng không?

anon52681320 viết 02:15 ngày 01/10/2018

Về thực tế thì đúng là thế, nhưng bài toán đặt ra là bạn giải quyết thế nào với một lượng resource hạn chế hay sâu hơn là sự kiên nhẫn của bạn như thế nào. Nếu đặt bài toán với 2GB trên con iPhone thì nó cũng tương tự như với 2TB hay 2PB trên con server vậy thôi.
Thuật toán có thể hôm nay chậm, nhưng ngày mai có thể hiệu chỉnh được, chỉ là đừng hài lòng với chút kiến thức cỏn con, rồi tự bơi trong cái ao của mình.

Hung viết 02:16 ngày 01/10/2018

Cho em đào mộ.

Lúc câu hỏi này được đăng trên anh Hiền, các bài báo cũng copy của ảnh. Em thấy đa số mọi người không quan tâm cách giải như thế nào, mà chỉ bàn các vấn đề xung quanh: bài toán không thực tế tôi không giải, không cần học giải thuật, rồi bản qua bàn lại đến chuyện vĩ mô lập trình viên Việt Nam có cần học thuật toán, Việt Nam không giỏi về IT,…

Nhưng với thầy cô Đại học, bạn bè học Master, PhD ở nước ngoài lại rất hứng thú với việc giải bài toán, có người giải merge sort, người khác đưa ý kiến thêm radix sort, giải pháp lạ lùng là sleep sort (lần đầu mình biết), rồi dần chuyển sang các giải thuật song song, chunk, MapReduce. Họ quan tâm đến kĩ thuật nhiều hơn là quan tâm các vấn đề vĩ mô, nhân lực.

Trong các cuộc thảo luận về kĩ thuật, có 1 anh đã phỏng vấn tại Google, câu hỏi họ đưa ra gần giống anh Hiền nhưng khó khăn hơn: “Sắp xếp text file có dung lượng 1GB từ đĩa cứng trên máy có RAM < 1GB, yêu cầu chỉ được đọc ghi 1 lần”. Ai cũng bí không giải được câu hỏi Google.

rogp10 viết 02:06 ngày 01/10/2018

Thực ra cái câu hỏi “algo” đó làm cho bài viết bị loãng đi và đẩy nó sang một chiều hướng khác. Mà ngôn ngữ mạnh là nhờ framework, bỏ framework thì làm gì.

Donght viết 02:11 ngày 01/10/2018

Bác nói đúng, ngôn ngữ mạnh là nhờ framwork. Nếu ko có nó thì mọi người code ai người đó viết, code ai người đó đọc…Còn nếu ko có framwork thì vào các cty họ cũng tự buil framwork của họ dựa trên ngôn ngữ lập trình. Nói chung muốn tiến xa thì giỏi lập trình, muốn kiếm cơm nhanh thì học framwork

chazo1994 viết 02:22 ngày 01/10/2018

Em thấy câu này rất hay:

“The technologies come and technologies go but insight is forever”

Bài liên quan
0