The fallacy of high-level programming

For the last 5 years or so, I’ve stopped writing on technical subjects on this blog. But that doesn’t mean I stop writing completely, in fact, I keep on writing a lot, but keep them to myself instead of posting out. For reasons too numerous to tell, or to be short, just because… I’m lazy… Software engineering is a still a relatively – young industry, hence… naivety, untruthfulnesses, deceptions, myths, lies, and dogmas are… countless. In that environment, writings could be controversial and misleading, so I choose to note down my ideas in private.

started with Turbo-C on DOS, then move on to different dialects of the C language: Watcom C, Borland C++, C++, glibC, Obj-C… For me, the most important thing in programming is… crashes. It crashes right away to tell you that you’ve done something wrong! It crashes when you access a null pointer, it crashes when you use an API the wrong way, it crashes when you allocate an infeasible amount of memory, it crashes when you access a dangling pointer referencing to an object which has gone out of scope, just because you can’t keep a right tracking on the life-cycle of that object. It doesn’t even throw an exception and try going on until the situation is unmanageable. Simply put, there’s NO exception, you’re punished immediately, as soon as you’ve done something wrong!

I strongly advocate the use of ARC for memory management, in fact, I would call it the most brilliant feature of the Obj-C language for the last 25 years or so, ARC makes life much more easier. But I also advocate the use of crashes as a “graceful” way to tell that you’ve done something wrong with the deallocated blocks. It crashes right away when you allocate an unbearable amount of memory so that you would know that your algorithms and data – structures are not efficient enough, and you will need to improve, to do tuning, optimization! For me, modern languages are good and friendly, the down side is that it’s also too friendly to the developers, without punishments, how can the devs’ skills could be improved!

Thus, by the interacting between you – the coder and the computer & compiler combination, the reward – punishment model will help greatly boost the devs’ skills over time, and help producing good code. There’re huge differences between an experienced programmer who write good code, and foresee possibilities of bugs, and a novice one who only try to make it… just run. I really want to emphasize here, that the “reward – punishment” model of programming is what made a good programmer! Also by learning to handle memory problems by yourself give you opportunities to follow and understand the life cycles of objects, of memory blocks, understand the precise flows of code, understand the cost-and-benefits of each coding approaches.

To summarize about languages, C is like Sanskrit, extremely precise and accurate, rigid grammar, strong types, all syntaxes has profound implications. High level languages such as Swift, .NET, JavaScript, etc are like… Vietnamese, lacking a good grammar, and quite vague and inconsistent in meanings. Of course, learning C is hard, not everyone want to do things the hard way. On the other hand, it’s too easy to quickly draft up some simple apps in high-level languages, which would naturally give a fallacy that devs are good, whatever they write, it seems to run “smoothly and perfectly”! Of course, high-level languages have their roles, for examples, to make some prototyping… until things get huge and complex!

giãn cách, 6

rước em có nói về việc này, luật không thể dựa trên những khái niệm cảm tính, không được định nghĩa chính xác, và ban hành luật xong, không có các biện pháp thi hành thuận tiện! Về việc kiểm soát đi lại thời dịch, cần phải trả lời mấy câu hỏi: doanh nghiệp nào là thiết yếu cần phải hoạt động, ai được quyền đi lại trên đường, và làm sao để xác minh quyền đó một cách nhanh chóng!? Không thể cứ để tình trạng ai muốn đi là cứ đi càn được!

Chuyện này bảo khó thì không khó, nhưng bảo dễ cũng không dễ! Không dễ để xây dựng một hệ thống từ con số 0! Cách nhanh nhất có thể làm là lệnh quốc hữu hoá một công ty messenger nào đó (viber, zalo, etc…) hoặc chí ít là nhà nước mua lại 51% cổ phần để kiểm soát công ty, để tận dụng các cơ sở hạ tầng và giải pháp kỹ thuật đã có sẵn, từ đó xây dựng nên giải pháp cấp quyền đi lại! Tại sao lại phải xài một cái messenger app nào đó!?

Vì messenger thì ai cũng dùng, từ tư nhân cho đến nhà nước, các công ty, cơ quan đều có chat group trao đổi công việc, mọi người biết lẫn nhau! Việc cấp quyền là trên cơ sở những quan hệ “đã xác minh” này! Lúc này rồi mà vẫn tư duy “luồng xanh, luồng đỏ”, đi lại, đăng ký một đống giấy tờ, chờ chực xác minh, gặp biết bao nhiêu người, tụ tập tăng cơ hội lây nhiễm! Đương nhiên vẫn còn nhiều yếu tố kỹ thuật liên quan đến hải quan, quản lý thị trường!

Đại khái có thể hình dung, trừ quyền “root” không kể, quyền này cấp các user cấp 1 cho các sở, ban, ngành, các cơ quan này đến lượt nó cấp quyền cho các doanh nghiệp (user cấp 2), đến lượt các doanh nghiệp cấp quyền cho nhân viên (user cấp 3, cấp 4) quyền này thể hiện ra dưới hình thức một mã QR có thể xác minh nhanh chóng tại hiện trường, công an đứng chốt dùng app đối diện với app của tài xế là kiểm tra được ngay có quyền đi lại hay không!

Nhà nước không thể quản lý hết người đi lại, nhiều người như thế, chỉ có thể phân quyền ra cho các cơ quan, doanh nghiệp, và sau đó tiến hành kiểm tra giám sát xem, doanh nghiệp có lạm dụng quyền đó hay không! Dĩ nhiên với một hệ thống phần mềm nghiêm chỉnh, xài chính thức về lâu dài thì có rất nhiều chuyện phải suy nghĩ, đầu tiên là tính “chính danh”, nhưng nhất thời, xây nên một hệ thống chỉ dựa trên số điện thoại là cũng đã đủ tạm dùng trước mắt!

Việc kiểm tra, giám sát thực ra rất dễ, app xài một dạng database trung tâm, mọi hoạt động vận tải, đi lại đều có thể giám sát bằng GPS, có điều bất thường, như xe đi ra ngoài lộ trình, hay cấp quá nhiều mã đi lại bất thường, là hệ thống tự động phát hiện ra ngay! Doanh nghiệp vi phạm có thể nhanh chóng bị chế tài, bị phạt theo một cách nào đó, hay người dùng vi phạm có thể lập tức bị truy hỏi, hạn chế ở các chốt kiểm soát gần nhất!

e-ink display

iện tại, giá còn hơi chát, nhưng tương lai 1, 2 năm nữa, có 1 cái viễn cảnh như thế này: máy tính của coder nên có 2 màn hình, 1 LCD truyền thống, 1 e-ink, trong ảnh là màn hình e-ink Dasung, cty trụ sở tại Bắc Kinh, TQ (đã có màn hình kích cỡ 25.3 inch). Tất nhiên, nhiều thao tác máy tính vẫn cần đến màn hình đầy đủ mầu sắc.

Nhưng với một coder mà nói, một ngày có khi hơn 12 tiếng, phần nhiều chỉ edit text, thì màn hình e-ink hoàn toàn không phát sáng, đúng nghĩa là “giấy trắng mực đen”, có thể bảo vệ mắt tốt hơn rất nhiều, càng tốt hơn nữa nếu có thể hiển thị 256 mức xám! Xứ sở phát minh ra giấy, đương nhiên sẽ làm giấy điện tử thật tốt! 😀


giáo dục thể chất – 1

ây là hệ quả của cái lối: “chơi thể thao 1 cách triết học, và suy nghĩ triết học 1 cách thể thao” đây mà! 😃 😛 Ai cũng biết sức khoẻ, thể chất là nền tảng của mọi điều, ấy thế mà vẫn chỉ “thể dục, thể thao” trên giấy, vẫn cố viết “sách”! Riết rồi suốt ngày chỉ loanh quanh với ba cái ngôn từ vớ vẩn thôi, rồi tìm cách “chơi chữ”, tìm cách “hơn người” bằng hoạt ngôn xảo ngữ, chứ động tay động chân thì không muốn và không làm được!

Không chỉ như thế, nó ảnh hưởng suốt về phần đời sau của đứa học sinh! Học cái gì cũng không có “hành”, chỉ lải nhải 1 mớ lý thuyết, ngôn từ chết! Học cái gì cũng lớt phớt bề mặt, không có chiều sâu, không có công phu! Nói đâu xa, ngay trong giới lập trình viên hiện tại, 10 người thì hết 9.5 người, hỏi cái gì cũng biết, công nghệ nào cũng biết, trên trời dưới đất, chỉ có điều là những kỹ năng lập trình phức tạp, thực tế thì không làm được!

CMM

hớ lại cách đây 15~20 năm, các công ty phần mềm, nhà nhà trưng bảng CMM level 5. Ai nấy đều tung hô như kiểu tiêu chuẩn vàng thần thánh! Mà tôi là kiểu dị ứng với kiểu hình thức rỗng không có nội dung! Ai đọc spec CMM rồi sẽ hiểu, đến giờ ý kiến cộng đồng về CMM cũng đã rõ!

Ngay lúc đó tôi đã nói với các anh em kỹ thuật: CMM5 cũng giống như “5 điều Bác Hồ dạy”, nghe thì rất hay, và có cũng tốt, nhưng vấn đề là chẳng có gì bảo đảm đứa trẻ làm theo sẽ trở thành người tốt, cũng như không có gì bảo đảm có CMM5 thì làm sản phẩm phần mềm có chất lượng và thành công!

Bao giờ chúng ta tự nghĩ ra được nội dung, tự tạo dựng được giá trị, thì lúc đó chúng ta mới thôi bị người khác áp đặt tư tưởng, thôi bị lung lạc trong mớ sáo rỗng! Công nghệ phần mềm mới có vài chục năm lịch sử, vẫn là 1 ngành rất non trẻ so với những ngành khác, nên giáo điều, sáo rỗng là… vô số!

panorama

ồi đó, không nhớ là năm nào, xài cái iPhone 4S (dạng cũng rất hiện đại lúc đó) chụp ảnh panorama, thấy chất lượng tệ, không bằng lòng nên đi mua cái Sony NEX5R, chiếc máy ảnh không gương lật đầu tiên, chụp panorama khá tốt. Hôm nay thử dùng chỉ 1 cái iPhone 7 cũ rích chụp pano thử xem, cho ra 1 cái ảnh 15000 x 4000 pixel (chờ ảnh load hơi lâu), má ơi, đúng là mình lạc hậu về công nghệ thật rồi! Haiza, đúng là thời thế, công nghệ đi quá nhanh, đẹp hơn hẳn máy ảnh chuyên nghiệp ngày xưa…

P/S: làm nghề lập trình, nói có vẻ ngược đời, nhưng từ xưa giờ vẫn quan niệm rằng: tôi chẳng cần phải biết cái éo gì về công nghệ (technologies) cả! Tôi chỉ biết về kỹ thuật (techniques) thôi! Vâng, nói rõ ràng như vậy! Tôi chỉ biết những mánh mẹo, kỹ xảo lập trình xa xưa, những thủ pháp cấu trúc dữ liệu, tối ưu hoá li ti, thời của “programming pearls” – những viên ngọc lập trình ấy! Coder giờ toàn ở “trên trời”, công nghệ này kia, AI, Machine learning, Big data, nói như vẹt, chỉ có điều mấy cái “rất căn bản” lại không biết! 😢

Ảnh lớn, cuộn theo phương ngang để xem.

quy tắc 10,000 giờ

uy tắc 10,000 giờ liệu có đúng!? Từ lâu các “bài bản” trên internet đã “kháo nhau” rằng, dù là bất kỳ lĩnh vực gì, tập trung cho nó đủ 10,000 giờ, bạn sẽ trở thành “thiên tài” hay “chuyên gia” trong lĩnh vực đó!?!? Mới nghe tôi đã phì cười…

Như tôi, lập trình C: Turbo, Borland C++, Visual C++, Objective-C, glibc, WatcomC… chỉ xoay quanh đúng mỗi ngôn ngữ C, hơn 20 năm, thời gian bỏ vào đó hơn 10,000 giờ nhiều lần. Hay thời gian dành cho thuyền bè 6, 7 năm qua cũng đã hơn 10,000 giờ, mà cũng chưa nên cơm cháo gì!

Cuộc sống ko dể dàng đến thế! Thật ớn ăn cho các “tác giả” – “giả cầy” của thời buổi marketing, PR, sale, SEO… những lĩnh vực lúc nào cũng chỉ muốn “mì ăn liền” và hiệu quả nhanh chóng. Họ đang nô dịch chúng ta từ trong suy nghĩ… 10,000 giờ ư, chuyện nhỏ!!! 😀

algorithms

ột phần quan trọng của 4 năm ĐH nằm trong cuốn này. Sách ngoại văn bìa cứng (hard cover), giấy tốt, đồng giá 50K/cuốn. Những năm 199x, FAHASA nhập sách ngoại về, bán chẳng ai mua, canh me đi qua lúc nó sale off, xúc luôn 1 lúc 20 cuốn, từ Algorithms, Data structure, Database… Algebra cho đến Mathematical Analysis, etc… Cũng là lý do tại sao thuật ngữ Toán, Tin… ko hề biết tiếng Việt. Cũng chưa thấy cuốn sách Tin học nào hay và bổ ích như cuốn này.

Nói cho đúng là cái cách hành văn khoa học tiếng Anh của nó ám ảnh mình, ít khi thấy được một cách hành văn hay, súc tích, dể hiểu đến như thế, cộng thêm minh hoạ cực kỳ xinh đẹp. Nếu nói mức độ hiểu 1 vấn đề nó thể hiện qua cái khả năng diễn đạt, trình bày lại để cho người khác cũng hiểu vấn đề đó thì tác giả cuốn này đúng là siêu đẳng !!! Về sau phát hiện ra, cả thư viện ĐH KHTN có đúng 1 cuốn này, mình có riêng 1 cuốn! Không có thói quen đọc nhiều sách, theo mình, cả ĐH chỉ cần đọc chừng 3, 4 cuốn, và cả cuộc đời chắc không cần đến 20 cuốn. Đọc nhiều quá phí hoài… tuổi xanh đi!

Dự định sau này mình sẽ đóng 1 cái kệ sách cao đến sát trần nhà, lý do là bỏ bớt những cuốn không đọc lên trên cao để không phải đụng đến chúng! 😅 Sách thực sự hay ít như sao buổi sớm, mà sách lôm côm nhiều như… lá rụng mùa thu! Sau bác nào đó thấy sách ngon, mượn ko trả, tiếc đứt ruột! 😥

lés travailleurs de la mer

Nơi nghĩa trang chật hẹp, tiếng vọng âm vang,
Chẳng một nhánh liễu xanh mùa thu trút lá,
Không một khúc hát ngây thơ buồn bã,
Góc cầu xưa người hành khất thường ca.

ritten with a Pencil stylus on an iPad using our own home – brew inking technology. Excerpt from the famous novel Lés travailleurs de la mer (Toilers of the Sea), Victor Hugo, and my literal, clumsy English translation: Navigation, it is education, sea is the brave school… The voyageur Ulysse had done lots more deeds then the Achille combatant. The sea quenches man, if soldiers are made of iron, then the mariners must have been made of steel. Look at them, in the ports, those tranquil martyrs, the silent winners, man figures with a religious look in their eyes as they’ve come out of the abyss…