The V programming language that will replace Python

TL;DR: An introduction to V programming language and my thoughts about how it will replace Python (or at least I hope that it should replace Python).

1. How I met V

I’ve seen V before when looking at Volt . I was finding a good application that’ll increase my productivity. I’ve seen V twice, the first time it didn’t impress me, but I like Volt and still waiting for its Linux version because I use Linux on a daily basis. At first I was like: “Well it’s just another new language trying to replace the God C++, nothing new here, it’ll just step down sooner or later”.

(God C++ is an expression I’m using to make fun of myself, I also use much Rust, Node.js, Python, Lua, … in my projects.)

I was wrong to myself. The second time I’ve been watching V recently, I was convinced about its development and decided to use V in some of my next projects. I didn’t understand it before and rushed into making a blind assumption.

2. V convinced me

I like LLVM and how it is making things very easy for someone to create a new programming language. It only takes weeks, not years like before when we didn’t have LLVM. These popular languages use LLVM as backend: Kotlin, Swift, Rust, …

What I see about LLVM is that it can help you build a programming language for your own needs faster and target cross-platform code generation easier. Now thanks to WebAssembly, LLVM-based languages are mostly portable though PC, Mobile and Web. I’ve seen a Web demo written in Kotlin too. I have no other comments about LLVM’s performance for the language you build upon its ecosystem. I was also thinking that all new programming languages should be built with LLVM.

V doesn’t use LLVM. Knowing that suddenly makes me realize how complicated LLVM is. In order to develop a programming language, you’ll have to pull massive chunks of libraries and big toolchain into your computer and suffer with really long build time with those. Your code writing becomes easier, yes. But not your whole development pipeline.

V made me think about how efficiently we can still manage for building such a complex software. Its compiler is written in itself, V. Compiler’s source code is automatically generated from V codebase. Interesting, right? Rust and Go also written in itself, but I didn’t find it fascinating as much as V. Because V is so simple! That’s when you feel you can learn everything about it from syntax to the core implementation. You would even want to contribute to V.

I won’t advertise again about V’s great characteristics, it’s already there on its website and anywhere. See it here for yourself:

Most of other languages has failed to make me believe in their long term future. V doesn’t and never will. It’s simple & efficient everywhere that it appears, even its website! If V team can make such a good website like that, no doubt that they can do even more for everything else. In fact, V’s development is going too fast, faster than other new programming languages and even greater than some of popularly developed languages out there. Checkout its GitHub and you’ll see that truth.

3. How I will use V

I’ve joined Discord community of V and talked with members here. I asked about how V was built and the original author of V explained to me. People here are very friendly. It also has Vietnamese channel so if you’re interested in V, we can discuss together. See you there!

I’m also looking for a way to code lightweight web client as a desktop application for my project. Luckily, V is able to. Perfect! I’m not going need Electron anymore. I thought I would build it in Rust, but now I’m sure that it can’t beat V for what I need.

4. V will (or should) replace Python

For a programming language to gain popularity fast, it needs a strong edge. That edge should be able to compete with other languages very hard and people won’t replace their tools easily. Despite the fact that I like V very much, I’m not going to actually replace languages that I use with V.

It’s possible to do almost everything in V, from web, desktop, mobile software to an operating system (vos project). But here is what I personally think:

1. For Web development, I feel good with Node.js, it’s fast enough and convenient with tons of libraries & tools. But honestly I use it to build Web UI and API server only, I don’t trust Node.js for much larger projects.

2. Desktop/Server development: C++ is already powerful for everything in the field and Rust is also getting mature quite fast. I will still prefer C++ for complex desktop software and Rust for computational server dealing with data processing, analytics, etc.

3. Mobile: currently I can’t give comments, I work for Mobile too but I don’t think I have enough experience to analyze it deeper.

4. V’s advantages over Python is: fast, simple to use, easy to compile/package for final product, great live code-reloading feature. Those make me naturally think that V is a great alternative for scripting language, although it’s a real programming language.

5. In my opinion, Python is slow enough to be replaced with something else. I use Python too but I always wish Python could have done better.

6. A large number of Python users are beginner programmers, they’ll keep learning new things and V has chances there. For non-software-development jobs (ie: an accountant writing code for cleaning/calculating data, data jobs in finance, …), V is possible to replace Python. Because these approaches take fewer resource to happen and then one day V will make a bigger change in the industry.

5. Closing thoughts

I believe in V’s future and actually contribute to its development whenever I can. My recommendation to readers is: “Learn the V language, you’ll know another great tool to use when it fits the situation.” Now I’m waiting for V’s webview module to be released and will enjoy all moments working with the best desktop web client framework ever!

Let’s learn V!

Why AI developers should learn Vulkan to make a big difference

Python is not a single solution for every problem. We’re already slower than the world. Develop differently!

A while ago I had an idea of using Vulkan in AI and ML learning, because I think it’s possible and suitable. Then I started to realize that it’s actually a good path. Let’s see why when reading about my idea below and some references from big companies worldwide.

You can use graphics API instead of OpenCL/CUDA to implement GPU-accelerated machine learning algorithm. Vulkan/Direct3D12’s compute shader capabilities are as mature as OpenCL/CUDA, especially Vulkan now can run on most platforms, even works well on Mobile (Android/iOS).

Some benefits of using graphics API in AI development:

  • Integrated image processing with GPU’s programmable pipeline. While with traditional GPU compute API you must write image functions manually, transforming pixel by pixel. Vulkan already understands your image and GLSL shader have many built-in image manipulation methods. You’ll have bigger and more convenient image processing libraries.
  • Better visualization: you take your GPU data and render directly to the screen, in 2D or even 3D to see how your AI behaves in real-time
  • Rich tools: debugging will be easier with graphics debugging tool, you capture and inspect your real-time AI frame by frame, detect bottlenecks, GPU wait, … to improve your AI power

Using API like Vulkan alone is already a boost for your AI, but there’s more. Companies like NVIDIA will make it even better for us. Recently a blog post has been published by NVIDIA engineers, instructing you to speed up neural network training time using a Vulkan extension. Read it here.

I know that this idea is still new to you, but it really opens up many chances in the field. Anyways we at InnerPiece ourselves are researching multiple “Vulkan for AI” topics and will show you more details in the future. One of our targets is to pioneer for true technology development in Vietnam.

5 signs that prove you’re a professional programmer

Share this to detect your heroes to follow and team up!

– You read software specifications: when your work is deep enough, you’ll realize that tutorials and manuals are for beginners of that field. Working with complex software requires reading though long and detailed specifications.

– You participate in various mailing lists: in general, people who don’t use email properly are low-skilled (especially writing, if you can’t write, it means you can’t produce from your thinking and your thinking is probably wrong). Mailing list is still the way that organizations use to help and communicate with developers. Or at least you should subscribe to some lists that deliver valuable knowledge for you to learn more.

– You work less: when you’re not smart enough for a problem, you only have 1-2 ways to solve it. That easy method often costs you more time sitting in front of a computer. A problem is solved quickly only if someone has come up with multiple solutions and picked the most efficient one. For example: sometimes bad software design forces you to write bad code so you can’t use more bad code to prevent errors, in that case you must validate your design when a problem shows up. And remember to protect your health since much work is never good. Live long to create more technologies.

– You have side projects: it could be your own projects, or other people’s / open-source projects. It confirms that you have ability to work on different software topics. Being a good code writer is not enough to excel in your career. You need to know how to start a project, communicate with other developers, make plans, control project scope, etc.

– You name your own title: don’t fear programmers from other companies, they may just sit there and write code like monkeys in the jungle. Companies tend to give employees those titles such as Expert, Leader, … mostly to make them proud so they’ll work more. You must understand your values and keep building so they would fear your name. The professional one should be strong enough to lead other people. Prove your knowledge beyond code and help the others to advance. Trust yourself and develop your own career as much as possible.


Original post on my facebook.

4.0 Technology in Vietnam: We may never win.

The true face of 4.0 Technology in Vietnam.
We may never win.
Share this to wake your friends up!

Vietnamese programmers are in a mist of computing:
– We barely understand the hardware, it’s hard to learn, everyone wants to make mobile and web applications while good code need to be optimized for a certain hardware configuration, especially in the large system.
– Back-end developers are not very into the hardware too, they like to think about databases, logic, …
– Why knowing hardware is important? You make the code run faster -> more power + less hardware cost. Who stays alive at last will dominate the market. Slow code makes you need more servers = much more money to run and your company dies early
– Python is everywhere and Python is slow (Don’t get triggered, only for example, many things are slow)
– We don’t develop from the root, we wait for people who create solutions for us to apply. Then every other company can do the same. Can we beat the others by doing that?

What is the root? C++ is one of the roots.
Look at top five of cryptocurrencies (market cap) right now:
– BTC: C++
– XRP: C++
– ETH: Go/C++
– BCH: C++
– XLM: C++

That’s blockchain. Next is machine learning:
Tensorflow is written in C++. Most of deep learning frameworks are made with C++ too. If you don’t develop from C++ and only wait for features to come for your language, you’re already slow.
Top companies develop from the root to get rid of dependencies, to go faster and take shortcuts wherever possible. One of the big roots is C++.
And everything is moving to GPU now, it has more computing power than CPU.
C++ is the best language for GPU, since long ago and sticks with GPU forever. If GPU has something new, C++ always gets supported very quickly. This can’t be changed.

You want Python or C#? Wait for people who make it for you from C++. Best companies are made from C++ as much as possible for power boost and energy saving.

Not only AI is coming to GPU, everything is coming to GPU, even blockchain can run on GPU fully soon!

You create new thing, you may win. Start with C++ because everything new and revolutionary starts with C++. Learning Blockchain, AI is good for you, but chances to really shine a light is very low unless you do it differently from the crowd.

Truth: C++ in formal education is dead in Vietnam, it never lived to be honest. No schools/universities, no centers could teach you to master C++. You need to learn it continuously in some years to be able to do something useful with it.

If some person/company wants to get to the top of technology, C++ is likely to be the answer. This post does not concern about other types of engineering.
If you want to get to the mountain top, learn C++.

Original post on my facebook.

Việt Nam cần quan tâm tới công nghệ đồ họa nhiều hơn

Giới thiệu về công nghệ đồ hoạ 3D và xu hướng của thế giới. Ngành chưa hề phát triển tại Việt Nam và tại sao bây giờ là thời điểm chúng ta có cơ hội ?

Công nghệ đồ hoạ được ứng dụng vào:
– Game
– Điện ảnh (VFX)
– Kiến trúc
– Thực tế ảo
– …

Game và phim điện ảnh là hai ngành có doanh thu khổng lồ có sự đóng góp lớn của công nghệ đồ hoạ. Các công ty thành công trên thế giới đều có những đột phá riêng trong công nghệ. Chúng ta băn khoăn tại sao Việt Nam chưa có Disney, Pixar, Blizzard, … mà ít biết rằng những công ty đó phát triển công nghệ riêng biệt để cho ra mắt những sản phẩm táo bạo.

2018 đặc biệt có những phát triển mạnh mẽ, thay đổi tiêu chuẩn ngành công nghệ nói chung và đồ hoạ nói riêng:

  • Physically based rendering (PBR): nhiều nghiên cứu đi vào thực tiễn giúp chúng ta có một công thức chính xác dựa trên đặc tính vật liệu của vật thể để biểu diễn hình ảnh trên máy tính. Các phần mềm đồ hoạ lớn ngay lập tức áp dụng và đưa nó thành tiêu chuẩn. Sự hiển thị giữa các phần mềm dần trở nên tương đồng với nhau. Các công cụ sẽ hỗ trợ lẫn nhau tốt hơn, chất lượng cao hơn.
  • Real-time ray tracing: để xuất ra được hình ảnh có đặc tính chân thực cao, các nhà làm phim phải đầu tư hệ thống máy tính cực lớn mới có thể làm hoạt hình và phim điện ảnh. Sau khi sản xuất thì quá trình tính toán đồ hoạ ra từng khung hình tốn rất nhiều thời gian và tài nguyên máy tính không phải công ty nào cũng có thể. Điều này đang dần được thay đổi nhanh chóng.
  • Microsoft ra mắt DXR giúp nhà làm game có thể tạo ra chất lượng như điện ảnh, hoạt hình trên máy tính cá nhân, hiển thị nhanh chóng. Apple thiết kế ra thứ tương tự với tên gọi Metal cũng có khả năng tính toán đồ hoạ chất lượng cao (bằng ray tracing) trong thời gian ngắn, và còn nhiều chức năng đồ hoạ cơ bản khác nữa.
  • Vài tháng trước NVIDIA ra mắt thành công RTX, nền tảng phần cứng cao cấp nhất thế giới cho phép game và phim tính toán hiệu ứng ray tracing đẹp mắt một cách dễ dàng. Cùng với đó là sự phát triển mạnh mẽ của Vulkan được nhiều công ty quốc tế và cộng đồng mã nguồn mở hợp sức phát triển, nhanh chóng nâng cao tiêu chuẩn, sức mạnh, đồng nhất nền tảng giữa các công nghệ đồ hoạ.
  • Tất cả những sự kiện trên cho thấy một sự chuyển dịch lớn. Tại Việt Nam không có trường đại học nào có thể đào tạo, chưa có công ty nào có thể nghiên cứu và phát triển theo xu hướng ngoại trừ InnerPiece. Startup tôi đang xây dựng đang đặt những nền móng đầu tiên cho một công ty công nghệ thực thụ và bền vững. Tôi mong muốn phát triển mảng này tại Việt Nam để chúng ta có những công nghệ xứng tầm, tự tay tạo nên sản phẩm xuất sắc.

InnerPiece đang có gì và đang làm gì?

Công nghệ game sử dụng kỹ thuật deferred lighting và PBR, 90% game cao cấp trên PC, máy chơi game Sony PS, XBox sử dụng kỹ thuật này.
Nghiên cứu và phát triển đồ hoạ Vulkan cho mobile (Android và iOS trên một bộ mã nguồn).

Tiến triển gần đây nhất đó là tôi đã nghiên cứu ra phương pháp phát triển real-time ray tracing có thể áp dụng cho hoạt hình, kiến trúc và điện ảnh. Con đường công nghệ còn dài và nhiều khó khăn, tuy nhiên tôi sẽ đưa InnerPiece đến đúng nơi mà nó xứng đáng.

Trở thành lập trình viên độc lập

Câu chuyện của tôi khi trở thành lập trình viên độc lập. Hãy đọc và chia sẻ câu chuyện của bạn.

Sau nhiều năm theo đuổi việc phát triển phần mềm, tôi đã dần trở thành một lập trình viên độc lập. Cho đến khi nhận ra điều đó gần đây, tôi đã bớt nghi ngờ những việc mình làm, ít “đứng núi này trông núi nọ” hơn, … và có thể biết rằng tôi nên làm điều gì phù hợp nhất cho bản thân.

Tôi bắt đầu chính thức học lập trình những năm cuối cấp 3. Tuy vậy trước đó cũng đã rất say mê với máy vi tính, internet. Xuất phát điểm của tôi là một người am hiểu cách sử dụng máy tính và phần mềm. Nên khi học lập trình có thể nói là tôi có khá nhiều lợi thế. Tôi sẽ kể chi tiết hơn về quá trình học lập trình cũng như thời gian trước cấp 3 của tôi vào một bài viết khác.

Cuối cấp 3, tôi viết một phần mềm hoàn chỉnh đầu tiên, nhờ đó được đại học FPT tặng học bổng 100% và miễn thi tuyển đầu vào. Tôi đã đưa mã nguồn của phần mềm này lên GitHub nhằm mục đích tham khảo. Người nhận ra đam mê và thấu hiểu các ý tưởng của tôi vào thời điểm đó chính là thầy Trần Thế Trung (Tiến sĩ – Viện trưởng Viện nghiên cứu công nghệ FPT). Thầy Trung là người đã phỏng vấn và trao cho tôi học bổng này.

Sau khi nhập học FPT cơ sở Hòa Lạc, tôi tiếp tục theo đuổi ước mơ trở thành một nhà lập trình phần mềm giỏi. Quá trình chinh phục kiến thức và vận dụng nó quả là dài khi nhìn lại.

Một số dự án mà tôi đã làm:

  • Phần mềm cắt video hàng loạt tốc độ cao: sau khi thấy một bài viết trên facebook của trường mô tả nhu cầu này, tôi đã nghiên cứu một chút và nhận lời tiến hành. Hoàn thành trong vòng 8 tiếng đồng hồ để giao cho “khách hàng đầu tiên” và nhận về một khoản tiền nhỏ. Tôi thấy vui vì mình đã đạt được một thứ gì đó. Và tôi không bao giờ nhận viết phần mềm để kiếm tiền kể từ đó trở đi vì biết rằng điều mình muốn đó là kiến thức. Phần mềm này quét tất cả các video trong một thư mục và cắt tất cả thành các đoạn video dựa trên thời gian đã định trước. Thời điểm đó các phần mềm cắt video trên thị trường đều chuyển định dạng khi cắt nên chạy rất lâu. Phần mềm của tôi chỉ tách video ra đoạn cần thiết, giữ nguyên định dạng cũ.
  • Phần mềm tự động cài đặt WordPress cho Windows: có một thời gian tôi đã thực tập phát triển khóa học dạy làm website cho một dự án của đại học FPT đang ấp ủ, mà sau này trở thành đại học trực tuyến FUNiX. Mục tiêu của khóa học đó là giúp bất kỳ ai có thể làm một website đơn giản nhất. Vậy nên tôi nảy ra ý tưởng này và viết phần mềm trên C#. Tôi còn nhớ là đã trao đổi với anh Quách Ngọc Xuân (hiện đang là Giám Đốc phát triển chương trình cho FUNiX) và chạy thử cho anh xem phần mềm để ứng dụng vào khóa học mà mọi người đang phát triển. Phần mềm này tự động cài đặt WordPress lên máy tính cá nhân sau một vài click chuột để người học có thể bắt đầu ngay.
  • Tự mình phát triển một mạng xã hội bằng C++: ý tưởng này nghe có vẻ rất xa vời để thành công. Nhưng tôi tự hào rằng mình đã rất cứng đầu theo đuổi những thứ không thể để nhận về nhiều bài học quý giá. Kết quả là tôi thiết kế ra được hệ thống có thể vận hành được. Nhưng toàn bộ dự án thì không thành công và không thể đi xa hơn. Dự án này vẫn còn đang ở trên internet và tôi vẫn duy trì sự hiện diện của nó, hi vọng sẽ có ích cho mọi người tham khảo:

Ngoài ra còn các dự án khác mà tôi không nhớ rõ hoặc chưa tiện để chia sẻ. Trong số đó có web, mobile và các mảng khác.

Trở lại với chủ đề của bài viết đó là trở thành một lập trình viên độc lập, bạn có thể nhận thấy rằng tôi có một động lực để làm phần mềm từ các ý tưởng của bản thân. Tôi cho rằng đây là một điểm phân biệt giữa thiên hướng phát triển sự nghiệp độc lập so với hướng thông thường khi mà bạn được dạy học lập trình, học hỏi trong các công ty và giải quyết những vấn đề mà người khác chỉ cho bạn. Bản thân từ độc lập cũng khá dễ hiểu: bạn sáng tạo độc lập, nghiên cứu độc lập và tự biến nó thành hiện thực.

Vừa rồi tôi nói đến phong cách, ngoài ra phát triển phần mềm độc lập còn có nghĩa là bạn không liên quan tới một công ty kiểm soát các công việc bạn làm. Bởi phong cách độc lập vẫn có thể xuất hiện trong một công ty, nhưng nó không mang nghĩa độc lập hoàn toàn mà tôi đang nói tới. Tôi đang là một người phát triển phần mềm độc lập hoàn toàn.

Tôi đã từng làm việc thực tập hoặc toàn thời gian tại một số công ty, nhưng không thấy thích thú bằng việc làm độc lập. Hầu hết kỹ thuật của họ rất thấp, các công việc không đủ thách thức như tôi mong muốn, hoặc có thách thức nhưng bản thân nó lại không có ý nghĩa vì sứ mệnh của công ty chưa rõ ràng. Tôi không thích những môi trường không có lý tưởng trong sự phát triển, đặc biệt là hệ thống tư tưởng trong phát triển phần mềm.

Tôi khá thích phát biểu của ông Phạm Thanh Hưng (CENGROUP):

“Đến nay tôi đã nhảy việc hàng chục công ty rồi, có những công ty như Ford, Toyota tôi chỉ làm việc vài tháng, còn 1-2 công việc là tôi làm lâu hơn thôi.

Tôi khuyên các bạn nếu thấy công việc không thoải mái, không hợp với bản thân mình thì hãy rút luôn để đổi công việc khác, thậm chí nghỉ luôn ngay khi chưa tìm được công việc mới.”

Chọn con đường phù hợp với bản thân thì quan trọng hơn việc níu giữ một hướng đi. Hãy dám quyết định và quyết định lại nếu bạn thấy sai. Tôi biết rằng nếu hi sinh tâm hồn của mình để thân xác của mình làm việc theo một cách ít có cảm xúc, lâu dần bạn sẽ gặp nhiều vấn đề lớn hơn trong cuộc sống. Và vì thời gian của chúng ta có hạn, hãy thực hiện ước mơ của mình bằng mọi cách. Có thể là một ước mơ nhỏ như học lập trình cũng hãy làm nó như thể không còn gì quan trọng hơn. Tiếp tục như vậy và dần dần bạn sẽ có kết quả. Chinh phục ước mơ nào cũng như nhau, khác ở thời thế mà thôi. Bản thân nếu đã biết cách nắm lấy các cơ hội thì tương lai luôn có thứ để cho bạn tiếp tục cải thiện bản thân và thay đổi cuộc đời từng ngày.

Cuối cùng thì, dù là lập trình viên độc lập hay là ai thì chúng ta vẫn chỉ là những con người bình thường. Tôi chia sẻ về nó bởi đó là một trong những điều tôi thấy vui khi sống và làm việc. Hi vọng sẽ không có những cá nhân đưa ra vấn đề này theo hướng gây tranh cãi/thắc mắc, mà nên là hướng gợi mở để chúng ta suy nghĩ nhiều hơn về cuộc sống và làm tốt hơn trên con đường đã chọn.