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!

styli

was playing around with some iPad’s styli lately and here they’re: the Wacom Bamboo stylus, TruGlide, Adonit Jot, Adonit Jot Touch, Jaja, Cregle’s iPen and ByZero. I’ve been loving the smoothness of Bamboo, but TruGlide is really an excellent one! The new Adonit Jot Touch seems to be promissing, and on the second position is Jaja (for pressure sensitive styli).

wwdc 2012

t would start within a week from now, the well – expected event of Apple’s world – wide developers conference of 2012 – WWDC 2012. To welcome the tech fair 😛😛, on the left is a screen capture of what I’ve been working hard on for the whole last month (the video is not really clear since it’s shot with my phone), a photo browser UI like iPad’s Photos app. It takes time to learn insights into Core Graphics, Core Animation, and I’m still learning. For all those years of graphics I’ve been through, Apple UI and its graphics sysem are still sooo… brilliant and amazing to me! (and “our love has just begun”!) Keep heading North!

apps

hẳng bao giờ muốn nói về software engineering, vì với tôi, đó là việc làm hàng ngày, đã làm hàng ngày thì có gì nhiều để mà nói!? Để ý thấy thường ai đó nói thật nhiều về điều gì (tiền bạc, tình yêu, trí thức, đạo đức…) thì tức là người ta thiếu cái đó! Tôi thì chỉ muốn nói nhiều về nhạc, vì âm nhạc với tôi là chưa bao giờ đủ! Tuy vậy hôm nay ngứa miệng nói về software engineering chút, gần đây đọc được một bài viết khá hay, trình bày lại ý chính ở đây: phát triển ứng dụng giống như là một nhà làm phim độc lập.

Phát triển app giống như làm phim: cả hai loại người này, coder và film – maker, đều có cá tính độc lập và xu hướng muốn sáng tạo, tạo nên một sản phẩm gì đó và “quăng ra” cho công chúng, mà đôi khi họ cũng không để ý đến việc quảng cáo, promotion cho sản phẩm của mình. Tuy nhiên khác với phim: kịch bản đã được viết sẵn từ đầu, việc làm app đòi hỏi coder đóng cùng một lúc hai vai: diễn viên và đạo diễn, với phần lớn khả năng là không thể biết trước được kịch bản sẽ như thế nào, sản phẩm của mình sẽ đi về đâu.

Đội một chiếc mũ khác lên đầu, ta sẽ nhận thấy apps ngày càng giống các sản phẩm bán lẻ. Nhiều coder có xu hướng “tự kỷ” cho rằng công việc mình làm là một cái gì đó “công nghệ cao” hay “to lớn”, đó là cái ảo tưởng hình thành không biết từ đâu: giáo dục, truyền thông, môi trường làm việc? Thực ra apps đã trở nên rất giống các sản phẩm bán lẻ (sữa tắm, dầu gội, kem đánh răng…), có hằng hà sa số các sản phẩm tương tự cạnh tranh với bạn, thị trường nhiều khi đến mức bão hoà, thế nên các chiến thuật marketing là một yếu tố quan trọng.

Điều này đồng nghĩa với việc coder phải chuẩn bị tinh thần để customize sản phẩm của mình theo nhu cầu của khách hàng, bỏ nhiều công sức, thời gian để cải tiến, đánh bóng các chức năng của phần mềm, đừng vội vàng tung ra một sản phẩm chưa tốt, dù vẫn biết rằng time – to – market là một sức ép hết sức lớn. Có một “thành ngữ” nói rằng: khách hàng không thông minh như ta nghĩ, và họ cũng không ngu như ta nghĩ. Điều này hoàn toàn đúng để nhận xét về chất lượng, tính cạnh tranh của các phần mềm.

Gần chỗ tôi ở có một công viên xinh xinh, cuối tuần nào ra đi dạo cũng thấy người ta mượn không gian để làm phim (đa phần là các loại phim truyền hình rẻ tiền dạng 20 triệu đồng / tập). Dừng lại và chú ý xem diễn xuất, kịch bản thì nhận ra đó toàn là những loại: con chó của tôi bỏ tôi ra đi, còn vợ tôi thì bị xe tải cán chết!, hay tệ hơn nữa là những loại: chống chỉ định với trẻ em mang thai và đàn bà dưới 16 tuổi! (đảo ngược 2 vế lại một chút 😬). Các bạn tôi ơi, khả năng kiên trì và sáng tạo của các bạn còn tốt hơn của các loại lau nhau kia nhiều… hãy vững bước trên con đường của riêng mình!

chuyện tình tự kể

gày nào, cho tôi biết, biết yêu em rồi, tôi biết tương tư, sau đây là câu chuyện tình tôi tự kể, ngày nào, biết mong chờ, biết rộn rã buồn vui đợi em dưới mưa… Chúng tôi quen nhau tính về thời gian chưa phải là quá lâu, chỉ một vài năm gì đó. Nhưng nguồn cơn, nguyên do câu chuyện có lẽ đã được vun vén, manh nha từ lâu rất lâu về trước, tôi thương em dễ có từ thủa mẹ về với cha.

Bao giờ biết tương tư - Tuấn Ngọc 

Những lý do, ngọn nguồn chẳng thể nào mà giải thích và truy nguyên cho được đã dần đưa chúng tôi lại với nhau tự lúc nào. Tình yêu nào rồi cũng sẽ đi qua nhiều thăng trầm, đã có lúc tôi cảm giác chẳng hiểu gì về em, nhiều khi sự khó khăn của em làm tôi nản chí, cũng có khi tôi đã hoang mang, nghi ngờ em và chính mình.

Nhưng với tình cảm chân thành, bằng trực giác tự nhiên mách bảo, chúng tôi đã vượt qua nhiều sóng gió, để đến một ngày: ngày nào, cảnh thiên đường, đã mở hé tình yêu là trái táo thơm, tôi ghé răng cắn vào… Đến đây thì hẳn các bạn đã đoán ra nàng thơ của tôi tên là… Apple –  hiện diện trên các MacBook, iPhone, iPod, iPad xinh xắn! 😬

con bò tím

hi còn nhỏ, tôi có một “biệt tài” là… mài dao rất sắc 😀. Một công việc tưởng chẳng khó khăn gì nhưng thực ra cũng không đơn giản lắm, muốn mài dao cho sắc và độ sắc ấy giữ được lâu cũng có khá nhiều kỹ thuật mà tôi chỉ tìm ra được sau nhiều tuần thử nghiệm. Chẳng là trong nhà họ hàng tôi lúc ấy làm cau khô: mua cau tươi về gọt vỏ, cắt miếng và sấy khô đem bán. Người ta chẳng bảo sắc như dao cau là gì, và ai đã làm công việc đó sẽ hiểu một con dao sắc là như thế nào.

Đơn giản chỉ vậy nhưng cái “niềm đam mê dao sắc” ấy, nếu có thể gọi như thế, nó đi theo tôi đến tận bây giờ. Gần đây tôi mua con dao gốm (ceramic knife) Nhật này, với giá bạn có thể mua được 10 con dao thép tốt khác. Cực kỳ sắc bén và chắc chắn, đủ bền và bén để cắt những thứ mà dao thép vẫn thường được dùng. Đặc biệt là chất liệu gốm sứ trắng muốt, trông rất mảnh mai và xinh xắn, nên chỉ dám dùng vào việc cắt, gọt trái cây hàng ngày. Đó có thể chỉ là một “impulse purchase”, thực ra tôi muốn thử một chất liệu khác biệt.

Làm một con dao, hay mài nó cũng không phải là việc quá đơn giản. Đỉnh cao như katana, kiếm Nhật, phải mất hơn 30 năm để học cách làm kiếm, và hơn 6 năm để học cách… mài kiếm sao cho sắc 😀. Nhưng túm lại thì nó có liên quan gì đến nhan đề của post này: con bò tím – the purple cow!? Một tựa sách của Seth Godin: Purple Cow – Transform your business by being remarkable mà gần đây tôi được đọc! Một cuốn sách về marketing, 160 trang khổ nhỏ, dể đọc với một số ý tưởng và khá nhiều ví dụ thú vị.

Từ những trang đầu tiên, tác giả đã khẳng định ý tưởng xuyên suốt cuốn sách là: mô hình các chữ P truyền thống: product, pricing, promotion, publicity… đã không còn nhiều hiệu quả, chữ P mới ở đây là purple cow. Nói cách khác, mô hình dựa vào những sản phẩm trung bình, và rất nhiều quảng cáo dần lùi bước, thay vào đó là những sản phẩm thực sự tốt và người dùng tự tìm đến cái họ cần. Vai trò của luật số lớn không còn như trước, ý tưởng tốt, sản phẩm tốt sẽ lấn át quảng cáo và truyền thông đại chúng.

Tôi hơi ngạc nhiên khi đọc những dòng về quảng cáo: bạn không thể làm cho tất cả mọi người phải lắng nghe mình, hãy tìm ra những người quan tâm, và hướng các chữ P vào đó. Điều này có thể bắt đầu đúng ở đâu đó, nhưng ở một xứ như VN, khi người tiêu dùng như những con bò được chăn dắt, thì tìm đâu ra một con bò tím? Ý tưởng của cuốn sách dần lộ rõ, một trong những ý tưởng đầu tiên trong thời economic recession này, khi hướng business tới chiều giảm phát, nghiêng về chất lượng để bù lại quá trình lạm phát.

Quá trình lạm phát đó đã có lịch sử nhiều thập niên với kết quả là những sản phẩm được đánh giá very good cũng không phải điều gì đặc biệt lắm. Nên trái nghĩa với remarkable là… very good. Tác giả lấy ví dụ những loài chim di cư thường bay theo đội hình chữ V. Những doanh nghiệp ăn theo xu thế cũng giống như những chú chim bay theo con đầu đàn. Nhưng điều mọi người không thấy là trong bầy chim, định kỳ vẫn có sự hoán đổi vị trí để con đầu đàn được nghỉ sức, những con chim khác đảm nhận vị trí bay đầu tạm thời.

Tác giả dành rất nhiều trang để đưa các case study minh hoạ thế nào là một remmarkable product. Một remmarkable product cũng giống như một con bò màu tím, bạn đã thấy một con như vậy ở đâu chưa, bò tím thật sự là rất khác biệt. Là một cuốn sách về marketing, tác giả dành nhiều thời gian phân tích sự nổi trội của con bò tím, hơn là cách thức tạo ra nó. Với thị trường như VN, tôi sẽ nói bạn có thể tạo ra con bò tím bằng cách phết sơn tím lên một con bò bình thường, nhưng tốt hơn hãy bắt đầu đi nghiên cứu cách biến đổi gene loài bò!

Là một người làm kỹ thuật, Purple Cow không thực sự cuốn hút tôi lắm. Nhưng nó đánh dấu những xu hướng gần đây của nền kinh tế, bạn phải tạo ra được những sản phẩm thật sự có chất lượng và thật sự khác biệt, những sản phẩm không thể chỉ được đánh giá là very good mà tự thân nó thôi đã cuốn hút người dùng, không cần nhiều đến quảng cáo. Như khi Steve Jobs giới thiệu iPhone 4, ông ta đã cố tình liên hệ: it’s like a beautiful old Leica camera, dòng máy ảnh ít tính năng, kém hiện đại mà vẫn có khoảng giá trên $6000.

Trở lại với ý ban đầu, con dao gốm thực sự là một purple cow (hay ít nhất với tôi là như vậy). Đã đến lúc phải học cách suy nghĩ để tạo ra những sản phẩm như thế. Khi sự lạm phát đảo lộn nhiều thang giá trị, khi ngay cả chữ very good cũng không gợi lên điều gì đặc biệt, thì đó là lúc học cách làm những điều bình thường nhất, không nhất thiết phải là cái gì đao to búa lớn, một con bò thì cũng chỉ là một con bò, một con dao cũng chỉ là một con dao, nhưng hãy là những con bò, con dao khác biệt mà người ta phải lưu ý và cần đến chúng.

writing on the margins

his is just a post of my truly nonsense and random thought. Some notions are just interesting in their own forms, like writing on the margins or sub luna saltamus – dance beneath the moon… I just particularly like the phrase writing on the margins, the action and its meaning, that’s why this website layout is designed with that notion in mind, the left column is reserved for additional and complementary information, as side notes along main content.

Take a look at the two iPad’s screenshots on the left and you would see how nice it is, writing on the margins in a modern and digital form, especially when you could still use your own handwriting with it. You may have noticed the two classical masterpieces (one in mathematics and the other in literature) referenced in those notes! 😀

ios-widgets

aving written myself numerous UI widgets, from simple to complex, from Windows to Linux, from 2D to 3D… but I’ve just started writing iOS widgets not too long ago. Making iOS widgets is really fun, for we have supports from the most powerful 2D graphics system ever built, that is CoreGraphics (Quartz 2D). The code, hosted on github, is released under MIT license, check it out for a demo project, I hope that these widgets would be useful somewhere, but yes, I know, don’t complain about the code quality, most is written in a rush and still have flaws in it, use at your own discretion!

1.   XFilePathHeader

This tabular header let you quickly browse a hierachy structure (like file system directories). The levels are shown as tabs, tap on a tab to jump to a parent folder, tap on the “Home” icon to jump to root folder.

2.   XSegmentedControl

The Apple’s standard UISegmentedControl only displays text, not image. This class lets you use image along with text (or image or text alone) in any orders (image then text, or text then image).

3.   XProgressTextField

This is a copy of Safari’s address textfield which shows a progress bar while the webpage is loading. Would continue to add more of these miscellaneous tiny widgets just for fun when I have time.

byzero stylus

uch an interesting device I’ve used recently, a stylus for iPad. While stylus like Wacom’s Bamboo is fine for general sketching, it’s not really suitable for fine – grained drawing. This Byzero takes a different approach as it does not use iPad’s touches, but provides its own mechanism. Image on the left: you can see that the pen is actually an ultra sound source, two microphones (and an infrared receiver) in a single piece plugged into the iPad connector port. Pen position detection is done by triangulation on the acoustic signals. This kind of setup can be found on many other things like this 3D laser scanner.

If you use the iPad seriously for taking notes and drawing, a stylus like this is a must, sometimes your thoughts, ideas can only be expressed with a pen: text, drawing and all kinds of presentations on a page. The stylus is sensitive, it can captures any glyphs you draw. However, it’s very irritating that the calibration process is not really exact: pen position is offset – ed by a small varying distance, and with a noticeable delay… This reduces the usability of the stylus much since it’s important to have immediate and correct responses on the screen for user to make micro – adjustments in his hand to produce good writing, drawing.

chẵn và lẻ – chẳng lẽ

Chuyện nó cũng tương tự như với Bám theo lề trái, lề phải là việc của con cừu của giáo sư Ngô Bảo Châu. Người ta cố tình muốn ghép ông vào một bên nào đó, nhưng ông không chọn bên nào cả, cả hai bên đều giống nhau, cùng một kiểu tư duy logic nhị phân cũ rích: không “địch” tức là “ta”, không phải “nhân dân” tức “phản cách mạng”, không tốt tức là xấu, không ngay tức là cong, blahblah… một kiểu trá hình cho cái thật sự là: không giống như tôi (nghĩ) tức là tầm bậy…

Cách suy nghĩ nông dân thiển cận và bần tiện như vậy và những hậu quả trực tiếp của nó tưởng như dễ dàng nhìn thấy, song có rất nhiều người “ngây ngô không hiểu” hoặc không muốn hiểu.

A metaphor for VN software engineering’s status quo, IMHO 😬

Below: Liliputian egg and the metaphor for endianness.

ột ví dụ kinh điển trong làng Tân nhạc để minh họa cho cái tư duy hình thức sơ đẳng và thô thiển phổ biến với người Việt. Cách đây đã lâu, một nhạc sĩ rất có tiếng và có tài sau một thời gian du học ở Liên Xô về đã nói: Văn Cao viết nhạc lẻ nhiều quá!. Thế là bắt đầu một trào lưu âm ỉ và kéo dài nhiều thập kỷ với tư tưởng chủ đạo: phê phán các nhạc sĩ “tiền chiến” sáng tác thiếu chuyên nghiệp, thiếu bài bản, tác phẩm viết ra sao toàn lẻ nhịp. Một thực tế đúng là đến 90% các sáng tác âm nhạc “tiền chiến” là lẻ nhịp.

Và có lẽ cũng đến 90% các tác giả “tiền chiến” là sáng tác ngẫu hứng, tài tử mà nên, chứ ít người thật sự có được huấn luyện trường lớp bài bản (nếu nói về bằng cấp, trường lớp thì e rằng không nước nào bằng Việt nam như hiện tại). Và cũng đúng theo nhạc lý cổ điển (Tây phương) thì nhạc viết ra nên theo luật cân phương, không nên lẻ: để hát nghêu ngao một mình thì không sao, chứ đưa vào ban nhạc, hòa âm, trình diễn lớn sẽ rất khó khăn. “Cái sự lẻ” ở các tác phẩm “tiền chiến” thể hiện những điểm sau:

  • Tác giả đa số là sáng tác ngẫu hứng, ít người có cơ hội tiếp xúc đầy đủ với trường lớp theo kiểu Tây phương.

  • Tuy không bài bản theo kiểu Tây phương nhưng đa số đều mang ảnh hưởng không ít thì nhiều của nền cổ nhạc VN.

  • Sự lẻ nhịp thể hiện tính chất bất ổn của thời đại, một giai đoạn có thể nói là biến động nhất trong lịch sử VN.

Bẵng đi một thời gian, tiếp xúc với âm nhạc thế giới bổng phát hiện ra rằng: âm nhạc Tây phương đương đại cũng lẻ nhịp rất nhiều, rồi quay lại nghiên cứu cổ nhạc VN thì phát hiện ra nó cũng lẻ không kém. Thế là chính những kẻ ngày xưa phê phán người khác “lẻ nhịp” giờ quay sang hô hào: Ah, tui cũng lẻ nhịp, tui đi kịp với thời đại. Đến đây thì mọi người sẽ hiểu ra cái thói tranh luận, cái cách suy nghĩ hình thức VN là như thế nào. Nói chuyện nhạc có vẻ trừu tượng xa vời, quay sang những chuyện cuộc sống hàng ngày, đâu đâu cũng thấy nhan nhản những kiểu tư duy “hình thức” như thế.

Ngay như trong ngành IT mà tôi làm việc, cả ở những dự án lớn nhất, những công ty to nhất, mọi người cũng dành đến 90% thời gian để tranh luận những thứ vô bổ: C hay C++, C++ hay Java, Java hay .Net, nào là Design Pattern hay không, nào là Waterfall model hay Iteration model, nào là Design trước hay Code trước, v.v. Những tranh luận chỉ có thể gặp trong Gulliver du ký: một quốc gia chia thành hai phe uýnh nhau vì một phe ăn trứng từ phía đầu to, phe kia ăn trứng từ phía đầu nhỏ!

Những ai hiểu vấn đề ngay từ đầu chỉ có thể cười mỉm mà thôi, và họ đã đi tới những đâu rồi, code thì vẫn tràn lan những lỗi sơ đẳng kiểu như: mảng (array) bắt đầu từ 0 hay 1 (cũng lại chẵn hay lẻ, có thể các bạn không tin nhưng những lỗi như vậy không ít). Đó là chưa kể một số người không muốn làm việc, ngồi một chỗ bàn chuyện chẵn lẻ, dậm chân cho bụi bay mù rồi tưởng tượng là mình đang chạy! Nói chuyện kỹ thuật sợ mọi người bảo là nó chuyên biệt quá, vấn đề tự lặp lại chính nó trong tất cả những chuyện khác: nhân sự, quản lý, sale… đâu cũng thấy kiểu tư duy như thế.

Có lẻ là do sức lực chỉ vừa đủ dành cho việc nắm bắt một số kỹ năng ngôn ngữ, nên sau khi có được một số danh từ, khái niệm cơ bản… thì họ mắc luôn vào trong đó, không tự vượt lên được. Nó cũng phản ánh một điều, người Việt chúng ta rất háo suy nghĩ hình thức, rất háo những chuyện: tôi là như thế này, người khác là như thế kia, ít người có suy nghĩ độc lập (“độc lập” chứ chưa nói “sáng tạo”), hoàn toàn cảm tính và “bầy đàn”, ít người muốn làm việc, ít người thật sự muốn theo đuổi kiến thức!