thảo luận - tương lai của Golang ở có sáng ko? | theNEXTvoz
pi nguyen
Golang sẽ thay thế Nodejs ở các startups, cân vs Netcore/Java ở enterprise dc ko? Các thím cho lời khuyên?
hu_cau
Go ngon đó bác, mình có join một project migrate Java sang Go, cái Java thì viết bằng Servlet cũ, lúc upgrade mấy ông sếp chuyển qua Go luôn, không chịu up lên Spring, mà dùng beego với grpc.
Nhân tiện mấy bác cho e hỏi có cách nào làm golang trên vscode bớt phò phạch không?
Toàn bị báo could not import package trong khi đường dẫn package hợp lệ (có xài gomodule)
Nhân tiện mấy bác cho e hỏi có cách nào làm golang trên vscode bớt phò phạch không?
Toàn bị báo could not import package trong khi đường dẫn package hợp lệ (có xài gomodule)
Đang code golang trên vscode, hoàn toàn bình thường
User settings:
"go.useLanguageServer": false,
hissteria
Chuẩn là Go dùng cho các thể loại tác vụ hệ thống và infrastructure
Fire Of Heart
Go mạnh lắm. Bạn nào mới ra trường nên theo.
Khuyên chân thành đấy.
Mình làm c++ lâu, cũng phải bỏ để qua golang
AnhSinhVien93
Fire Of Heart
Rảnh rảnh type vài dòng cho các bác:
Ưu điểm của Go:
1. Code dễ đọc, dễ hiểu.
2. Go compiler mang lại nhiều thông tin có để giải quyết các vấn đề thay vì những output vô nghĩa.
3. Go code portable
4. Hỗ trợ concurrency, distributed programming.
5. Support Garbage collection. Được thiết kế khá nhanh chứ ko chậm chạp như GC của java.
6. Ko có preprocessor, tăng tốc độ khi compile chương trình.
7. Có thể build web app.
8. Bộ thư viện chuẩn của Go cung cấp nhiều library cho phép làm việc dễ dàng.
9. Sử dụng static linking by default. Ko cần quan tâm tới library, different version v.v...
10. Support Unicode
(cái này mình đọc sách nhiều nên biết thôi :sexy
Tất nhiên ko có ngôn ngữ nào là hoàn hảo, quan trọng là mục tiêu khi người ta xây dựng ngôn ngữ đó là gì.
Ví dụ như Go thì ko có OOP, có thể gọi là ko trực tiếp support OOP thì chính xác hơn.
Về tốc độ thì mình nghĩ Go vẫn ko thể nhanh hơn C dc, đơn giản là Unix viết bằng C.
Nhưng dù sao Go là một ngôn ngữ hiện đại, dễ học, dễ nắm bắt, dễ viết.
Để học syntax 1 ngôn ngữ thì rất dễ, python hay Java thì chắc ngồi vài hôm là xong. Nhưng để thực sự "đào sâu" vào ngôn ngữ đấy, thì mình nghĩ các bác cần nhiều thời gian hơn rất nhiều.
Có thể mất cả năm trời để hiểu rõ dc các cơ chế hoạt động phía dưới của ngôn ngữ, sử dụng một cách thông thạo, code đẹp đẽ tối ưu.
Do tính chất công việc hiện nay nên đa phần nhiều người ko đạt dc tới level đó và cũng ko coi việc đó là quan trọng, với mình đó là 1 điều đáng buồn.
Các bác chỉ có thể code 1 cách tối ưu khi các bác hiểu rõ ngôn ngữ đó hoạt động như thế nào.
nntgwww
Go giờ. thấy thiếu nhất là generic. Code mấy đoạn xử lý array mà nhiều type là phải làm thêm cái function khác cho cái type khác
Hóng go2 ra nhanh cho chúng nó bớt chửi.
Giờ tuyển dung cũng nhiều mà Grab, Tiki, GHN là ví dụ.
longkim1508
Xài go thấy rất ức chế, thiếu rất nhiều những cái hay mà 1 ngôn ngữ lập trình mới nên có (so sánh vs rust hay swift sẽ hiểu)
Dart ngoài flutter để dev app mobile ra thì còn dùng chỗ nào nữa nhỉ? Có use case hay công ty nào lớn dùng không?
Thì mới nói là của tương lai mai phen ạ
nó là ngôn ngữ mới, khắc phục đa số những cái dở ở Js, java... Ngoài mobile ra thì định hướng của nó là cả web,desktop, backend...Còn về cái phần ai dùng nó hay không thì fen cứ xem có bao nhiêu công ty đã phát triển flutter với xem lại th bố tạo ra nó
Tốc độ chạy chỉ kém C,C++ 1 tí thì lại chả mọi hệ thống Backend sẽ viết lại hết bằng Go
Thế mà discord nó chuyển Go sang Rust đấy thím, chắc service nhỏ nào của nó thôi hay sao. Go code không khó rất tường minh, nhưng nó hơi ngu đối với mình ko có generic, try catch..vv . Trước bàn dân cũng propose rồi mà hình như là tác giả reject hết thì phải.
Ưu điểm của Go:
1. Code dễ đọc, dễ hiểu.
2. Go compiler mang lại nhiều thông tin có để giải quyết các vấn đề thay vì những output vô nghĩa.
3. Go code portable
4. Hỗ trợ concurrency, distributed programming.
5. Support Garbage collection. Được thiết kế khá nhanh chứ ko chậm chạp như GC của java.
6. Ko có preprocessor, tăng tốc độ khi compile chương trình.
7. Có thể build web app.
8. Bộ thư viện chuẩn của Go cung cấp nhiều library cho phép làm việc dễ dàng.
9. Sử dụng static linking by default. Ko cần quan tâm tới library, different version v.v...
10. Support Unicode
(cái này mình đọc sách nhiều nên biết thôi :sexy
Tất nhiên ko có ngôn ngữ nào là hoàn hảo, quan trọng là mục tiêu khi người ta xây dựng ngôn ngữ đó là gì.
Ví dụ như Go thì ko có OOP, có thể gọi là ko trực tiếp support OOP thì chính xác hơn.
Về tốc độ thì mình nghĩ Go vẫn ko thể nhanh hơn C dc, đơn giản là Unix viết bằng C.
Nhưng dù sao Go là một ngôn ngữ hiện đại, dễ học, dễ nắm bắt, dễ viết.
Để học syntax 1 ngôn ngữ thì rất dễ, python hay Java thì chắc ngồi vài hôm là xong. Nhưng để thực sự "đào sâu" vào ngôn ngữ đấy, thì mình nghĩ các bác cần nhiều thời gian hơn rất nhiều.
Có thể mất cả năm trời để hiểu rõ dc các cơ chế hoạt động phía dưới của ngôn ngữ, sử dụng một cách thông thạo, code đẹp đẽ tối ưu.
Do tính chất công việc hiện nay nên đa phần nhiều người ko đạt dc tới level đó và cũng ko coi việc đó là quan trọng, với mình đó là 1 điều đáng buồn.
Các bác chỉ có thể code 1 cách tối ưu khi các bác hiểu rõ ngôn ngữ đó hoạt động như thế nào.
Bữa cty mình có 1 case hài vl, má nào code Go sài ko đóng transaction hay sao ấy, nó lên connection poll
. Sập,
Nói chung Go nó tường mình rõ ràng nhưng code cũng tỉ mỉ tí là OK. Chứ mấy cái vụ transaction bên thằng Hibernate nó lo cho rồi.
Thế mà discord nó chuyển Go sang Rust đấy thím, chắc service nhỏ nào của nó thôi hay sao. Go code không khó rất tường minh, nhưng nó hơi ngu đối với mình ko có generic, try catch..vv . Trước bàn dân cũng propose rồi mà hình như là tác giả reject hết thì phải.
Generic thì go 2 sẽ có nhé.
Còn try catch thì hiện tại code theo nó function return error riết cũng quen. Cam giác try catch có thì sẽ sinh ra mấy ông đụng đâu panic chỗ đó
Thằng rust cung đâu có try catch đâu.
Nói chung go với rust force thăng dev phải có tâm khi handle error hơn.
Thế mà discord nó chuyển Go sang Rust đấy thím, chắc service nhỏ nào của nó thôi hay sao. Go code không khó rất tường minh, nhưng nó hơi ngu đối với mình ko có generic, try catch..vv . Trước bàn dân cũng propose rồi mà hình như là tác giả reject hết thì phải.
Discord 250 triệu người dùng voice realtime. So sánh ở tầm vĩ mô quá
đọc bài gốc của nó trên medium đi, phần response, nhiều ý kiến cho rằng chỉ cần upgrade version go lên bảng mới là đã giải quyết được vấn đề của go GC
drnoxxx
Go gọi là performance cũng ngon nhưng đéo ăn được Java, .NET Core, C++...
Go GC cũng đéo ngon bằng Java.
Những cái ngon nhất của Go là memory footprint, build time.
Bên tôi những cái critical performance vẫn phải dùng Java, còn lại Go và Python cho những chỗ khác.
Go gọi là performance cũng ngon nhưng đéo ăn được Java, .NET Core, C++...
Go GC cũng đéo ngon bằng Java.
Những cái ngon nhất của Go là memory footprint, build time.
Bên tôi những cái critical performance vẫn phải dùng Java, còn lại Go và Python cho những chỗ khác.
Cái cơ bản nhất là generic (có vẻ version 2 sẽ có, ngon hay k thì k chắc lắm)
Thiếu kiểu result (năm 2020 rồi gọi hàm vẫn trả về cái err và phải check nil haha)
Ko có kiểu optional
Thiếu nhiều hàm xử lý sequence (map filter reduce...)
Polymorphism ở runtime (rust có traits, swift thì xài protocol ở compile time) do hệ thống typing sida. B có thể thấy dev go abuse cái interface{} ntn.
Cá nhân mình thấy go giống như ngôn ngữ giúp các dev js / python code ra phần mềm nhẹ và nhanh hơn, chứ ko có j nổi trội.
Cái cơ bản nhất là generic (có vẻ version 2 sẽ có, ngon hay k thì k chắc lắm)
Thiếu kiểu result (năm 2020 rồi gọi hàm vẫn trả về cái err và phải check nil haha)
Ko có kiểu optional
Thiếu nhiều hàm xử lý sequence (map filter reduce...)
Polymorphism ở runtime (rust có traits, swift thì xài protocol ở compile time) do hệ thống typing sida. B có thể thấy dev go abuse cái interface{} ntn.
Cá nhân mình thấy go giống như ngôn ngữ giúp các dev js / python code ra phần mềm nhẹ và nhanh hơn, chứ ko có j nổi trội.
Chính xác là Go nó sinh ra trong thời đại cloud và serverless nên nó cần các thứ nhỏ nhỏ model đơn giản, startup nhanh, memory footprint thấp giúp deploy, scale, destroy nhanh chứ mode phức tạp làm việc với Go rất khổ.
đọc bài gốc của nó trên medium đi, phần response, nhiều ý kiến cho rằng chỉ cần upgrade version go lên bảng mới là đã giải quyết được vấn đề của go GC
Ý bạn là bài viết này:
https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f ~ 50 engineers tạo app cho 250 mil users, họ quyết định chuyển từ Go sang Rust chỉ vì GC ???
Như mình nói không ngôn ngữ nào hoàn hảo, bác kia hỏi Rust có gì mà Go không làm được mình đưa link dẫn chứng người thật việc thật cho xem, mình chưa hề nói Rust tốt hơn Go
Ý bạn là bài viết này:
https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f ~ 50 engineers tạo app cho 250 mil users, họ quyết định chuyển từ Go sang Rust chỉ vì GC ???
Như mình nói không ngôn ngữ nào hoàn hảo, bác kia hỏi Rust có gì mà Go không làm được mình đưa link dẫn chứng người thật việc thật cho xem, mình chưa hề nói Rust tốt hơn Go
Có Java là hoàn hảo đó bạn.
Fire Of Heart
Tôi giờ ngày nào cũng tự nhủ, ráng mỗi ngày try-hard golang thêm vài tiếng (bên cạnh việc công ty).
Bao gồm đọc sách, code side project, học thêm về distributed system, database.
Cố gắng 1-2 năm nữa lên pro, hy vọng dc lương 4-5k là ổn, khỏi cần ra nước ngoài nữa.
Chắc phải bỏ bớt thú vui gái gú, chơi game lại T_T
Nipin
cái vụ go -> rust của discord thực ra thì nó chỉ là một cái service nhỏ nhỏ thôi, nó đổi là vì muốn trải nghiệm ngôn ngữ mới là chính, chứ thực ra muốn performance thì có nhiều cách chả bắt buộc phải dùng rust. Backend của discord vẫn dùng elixir là chính, mà elixir là functional language trừ latency thấp ra còn lại raw performance thấp hơn java nhiều nói gì c++/rust, mà tại sao chúng nó không đổi?
Java fail từ câu slogan Write once, run anywhere
Người mới học, nếu thích đi hốt sh*t người trước để lại thì cứ Java mà chọn
Mình từ lúc ra trường tới giờ code đủ loại nhưng chưa code 1 dòng java nào
Java fail từ câu slogan Write once, run anywhere
Người mới học trừ khi thích đi hốt sh*t người trước để lại từ cứ vào Java
Từ lúc ra trường tới giờ chưa 1 code 1 dòng java nào
Cái đó chỉ là câu nói thôi. Chứ thực tế triết lý của Java là hướng đến lập trình hướng đối tượng. Các ngôn ngữ khác đa phần quá tập trung vào cú pháp (con trỏ trong C++, hoặc dùng nhiều từ ngữ dễ đọc như Python).
Bạn không code Java thì chắc là dev Javascript hả. Chứ dev Backend đa phần Java hết mà.
gâu_
các thím cứ nhìn xem PHP giờ vẫn còn nhiều dự án xài thì lo gì về PHP v2 vậy, tương lai thì PHP v2 chỉ có hơn PHP trở lên thôi
drnoxxx
^
Lazada, vứt sạch backend Go cũ chuyển hết sang Java.
Tiki đập một mớ cũ rewrite lại + build mới một loạt bằng Java.
Câu Slogan chỉ là câu nói, great
Đoạn bôi đậm mình chả hiểu bạn muốn nói gì nữa
Quay lại vấn đề, bạn thử kể cái project nào trong 5 năm trở lại đây thực sự nổi tiếng được viết bằng Java?
Mình làm cho công ty unicorn startup, quy mô chắc nhất nhì Sài Gòn này. Code chủ yếu bằng Go, TypeScript, Ruby. Còn Javascript thì chả phải hỏi. Trừ khi code system, embed còn không bảo không viết javascript chắc bạn không phải dev, kể cả làm DS, AI đi nữa
Thông cảm. Tại mình biết mỗi Java. Các ngôn ngữ khác mình không biết.
Nipin
Mấy thằng như lazada hay tiki lúc nó có cả chục triệu user, tiền như núi rồi nó mới tính viết lại một số service bằng java, chứ startup các kiểu có thần kinh mới dùng java. Mà tôi thấy nó đổi sang java/c# chủ yếu là risk management (tìm lập trình viên java/c# thay thế mà chất lượng đạt chuẩn dễ hơn nhiều mấy thằng kia) chứ đếch phải performance hay ecosystem như mấy bạn nói.
Quay lại với Go hay Dart, tôi thấy cũng có tranh cãi khá nhiều. Thằng thì bảo mấy ngôn ngữ được backup bởi google, đã có vài triệu dòng code google dùng in house rồi thì sợ gì không có tương lai.
Thằng khác thì bảo chính là google nó mới có vấn đề: google hay đem con bỏ chợ không nói, vấn đề lớn nhất là core maintainers của go/dart là nhân viên google chứ không phải là cá nhân tự do. Tuy việc này khiến golang/dart phát triển nhanh hơn, nhưng cũng đồng nghĩa với việc ngôn ngữ đó nó phát triển theo nhu cầu của google chứ không phải là của cộng đồng (vụ generic của golang là điển hình cho vụ này), một lúc nào đó nhu cầu của google nó không phù hợp với nhu cầu chung của cộng đồng nữa thì sẽ có nhiều thứ nhiêu khê (và tín dụng của google cho vụ này thường là....)
mà tương lai ở đây nói là tương lai tươi sáng, chứ tương lai thường thường thì viết COBOL hay PASCAL đều có tương lai hết, lương cao việc không thiếu
Câu Slogan chỉ là câu nói, great
Đoạn bôi đậm mình chả hiểu bạn muốn nói gì nữa
Quay lại vấn đề, bạn thử kể cái project nào trong 5 năm trở lại đây thực sự nổi tiếng được viết bằng Java?
Mình làm cho công ty unicorn startup, quy mô chắc nhất nhì Sài Gòn này. Code chủ yếu bằng Go, TypeScript, Ruby. Còn Javascript thì chả phải hỏi. Trừ khi code system, embed còn không bảo không viết javascript chắc bạn không phải dev, kể cả làm DS, AI đi nữa
Câu Slogan chỉ là câu nói, great
Đoạn bôi đậm mình chả hiểu bạn muốn nói gì nữa
Quay lại vấn đề, bạn thử kể cái project nào trong 5 năm trở lại đây thực sự nổi tiếng được viết bằng Java?
Mình làm cho công ty unicorn startup, quy mô chắc nhất nhì Sài Gòn này. Code chủ yếu bằng Go, TypeScript, Ruby. Còn Javascript thì chả phải hỏi. Trừ khi code system, embed còn không bảo không viết javascript chắc bạn không phải dev, kể cả làm DS, AI đi nữa
Java fail từ câu slogan Write once, run anywhere
Người mới học, nếu thích đi hốt sh*t người trước để lại thì cứ Java mà chọn
Mình từ lúc ra trường tới giờ code đủ loại nhưng chưa code 1 dòng java nào
Bạn chưa code java nên bạn chê nó thôi. Java nó rất mạnh và rất tốt cho một hệ thống lớn. Từng khía cạnh một thì có thể có thằng hơn nó, nhưng tổng thể thì mình ko thấy có.
Mình từng code c,c++, c#, java, python, js, scala và gần đây là go thì mình thấy vậy.
Tuy nhiên mạnh mẽ nhất và có lẽ khó nhất là thằng C++.
Với Go thì mình nghĩ nó thích hợp với infra hơn.
Câu Slogan chỉ là câu nói, great
Đoạn bôi đậm mình chả hiểu bạn muốn nói gì nữa
Quay lại vấn đề, bạn thử kể cái project nào trong 5 năm trở lại đây thực sự nổi tiếng được viết bằng Java?
Mình làm cho công ty unicorn startup, quy mô chắc nhất nhì Sài Gòn này. Code chủ yếu bằng Go, TypeScript, Ruby. Còn Javascript thì chả phải hỏi. Trừ khi code system, embed còn không bảo không viết javascript chắc bạn không phải dev, kể cả làm DS, AI đi nữa
Chú vật nhau với thằng dangmt đó làm j, nó vào thả bait kiếm post ấy mà, topic nào cũng 1, 2 câu xl chứ có cái j đâu.
Diễn đàn mới có tính năng ignore dùng khá mượt, khuyến khích ae thử.
Mấy thằng như lazada hay tiki lúc nó có cả chục triệu user, tiền như núi rồi nó mới tính viết lại một số service bằng java, chứ startup các kiểu có thần kinh mới dùng java. Mà tôi thấy nó đổi sang java/c# chủ yếu là risk management (tìm lập trình viên java/c# thay thế mà chất lượng đạt chuẩn dễ hơn nhiều mấy thằng kia) chứ đếch phải performance hay ecosystem như mấy bạn nói.
Quay lại với Go hay Dart, tôi thấy cũng có tranh cãi khá nhiều. Thằng thì bảo mấy ngôn ngữ được backup bởi google, đã có vài triệu dòng code google dùng in house rồi thì sợ gì không có tương lai.
Thằng khác thì bảo chính là google nó mới có vấn đề: google hay đem con bỏ chợ không nói, vấn đề lớn nhất là core maintainers của go/dart là nhân viên google chứ không phải là cá nhân tự do. Tuy việc này khiến golang/dart phát triển nhanh hơn, nhưng cũng đồng nghĩa với việc ngôn ngữ đó nó phát triển theo nhu cầu của google chứ không phải là của cộng đồng (vụ generic của golang là điển hình cho vụ này), một lúc nào đó nhu cầu của google nó không phù hợp với nhu cầu chung của cộng đồng nữa thì sẽ có nhiều thứ nhiêu khê (và tín dụng của google cho vụ này thường là....)
mà tương lai ở đây nói là tương lai tươi sáng, chứ tương lai thường thường thì viết COBOL hay PASCAL đều có tương lai hết, lương cao việc không thiếu
Mình ko đồng ý lắm với những gì bạn nói. Với các công ty lớn thì phần mềm ngoài chức năng ra thì nó còn phải yêu cầu là ổn định và an toàn. Với Java thì phần lớn xài framework. Phần ổn định và an toàn được framework đảm bảo nên công việc của dev rất nhẹ nhàng. Những ngôn ngữ khác khó mà bằng nếu ecosys ko tốt.
Để dễ hiểu thì coi như dev là tài xế. Rõ ràng là lái xe tự động dễ dàng hơn nhiều so với lái xe số. Càng tự động nhiều càng nhàng.
Mình ko đồng ý lắm với những gì bạn nói. Với các công ty lớn thì phần mềm ngoài chức năng ra thì nó còn phải yêu cầu là ổn định và an toàn. Với Java thì phần lớn xài framework. Phần ổn định và an toàn được framework đảm bảo nên công việc của dev rất nhẹ nhàng. Những ngôn ngữ khác khó mà bằng nếu ecosys ko tốt.
Để dễ hiểu thì coi như dev là tài xế. Rõ ràng là lái xe tự động dễ dàng hơn nhiều so với lái xe số. Càng tự động nhiều càng nhàng.
Java là ngôn ngữ tốt nhất rồi. Mấy cái Startup toàn rẻ rách. Chẳng biết tồn tại được bao lâu.
Mình ko đồng ý lắm với những gì bạn nói. Với các công ty lớn thì phần mềm ngoài chức năng ra thì nó còn phải yêu cầu là ổn định và an toàn. Với Java thì phần lớn xài framework. Phần ổn định và an toàn được framework đảm bảo nên công việc của dev rất nhẹ nhàng. Những ngôn ngữ khác khó mà bằng nếu ecosys ko tốt.
Để dễ hiểu thì coi như dev là tài xế. Rõ ràng là lái xe tự động dễ dàng hơn nhiều so với lái xe số. Càng tự động nhiều càng nhàng.
lý luận java stable là do framework nó nhảm vkl.
còn ecosystem, rất nhiều công ty lớn nó có policy là NIH (not invented here), ecosystem to hay nhỏ ý nghĩa không lớn.
(mấy cái framework/library ngon các bạn khen nức nở theo các bạn nghĩ là từ đâu mà có, tự dưng từ trên trời rơi xuống à?)
mà thôi các bạn thích java/thích dùng java thì cứ việc thích, có ai cấm. tôi hoàn toàn đéo có hứng thú với java cũng như mấy thằng java fanboy, cho nên mạn phép tôi đưa các bạn vào ignored list, về sau đỡ phải mất thời gian của nhau
lý luận java stable là do framework nó nhảm vkl.
còn ecosystem, rất nhiều công ty lớn nó có policy là NIH (not invented here), ecosystem to hay nhỏ ý nghĩa không lớn.
(mấy cái framework/library ngon các bạn khen nức nở theo các bạn nghĩ là từ đâu mà có, tự dưng từ trên trời rơi xuống à?)
mà thôi các bạn thích java/thích dùng java thì cứ việc thích, có ai cấm. tôi hoàn toàn đéo có hứng thú với java cũng như mấy thằng java fanboy, cho nên mạn phép tôi đưa các bạn vào ignored list, về sau đỡ phải mất thời gian của nhau
Mình ko biết bạn biết ntn mà lại phát biểu như vậy. Nhưng thôi nếu bạn không muốn tranh luận thì mình cũng dừng tại đây. Mình cũng xin ignore bạn vậy.
naiveryan
Back-end dev đặt viên gạch hóng tiếp. Vẫn chưa tới đoạn hay.
Bác nào làm tiki vào confirm thằng nào đập thằng nào cái
drnoxxx
Mấy bạn chưa bao giờ làm Java hay lỡ cỡ rồi nhảy sang cái khác luôn ác cảm vì cho rằng Java nó cùi, chậm, dài dòng... Blabla nhưng đâu có biết Java nó luôn tiến hoá để adapt với modern software development.
Tôi dùng cả Go cả Java cho hệ thống bên tôi, ngày trước tôi rất thích Go ở chỗ lightweight phù hợp với môi trường serverless nhưng dạo này Java có GraalVM thì ngon lắm rồi. Tương lai nếu Go k phát triển hơn thì mấy thế mạnh hiện tại sẽ bị thằng Java nó cắn mất. Chắc luôn
Mấy bạn chưa bao giờ làm Java hay lỡ cỡ rồi nhảy sang cái khác luôn ác cảm vì cho rằng Java nó cùi, chậm, dài dòng... Blabla nhưng đâu có biết Java nó luôn tiến hoá để adapt với modern software development.
Tôi dùng cả Go cả Java cho hệ thống bên tôi, ngày trước tôi rất thích Go ở chỗ lightweight phù hợp với môi trường serverless nhưng dạo này Java có GraalVM thì ngon lắm rồi. Tương lai nếu Go k phát triển hơn thì mấy thế mạnh hiện tại sẽ bị thằng Java nó cắn mất. Chắc luôn
Go không bao giờ phát triển được. Bởi vì Go viết ra không phải để cạnh tranh với Java. Nó chỉ được viết để cho nhân viên Google dùng. Các ngôn ngữ viết ra đều có chọn lọc tự nhiên cả. Không phải ngẫu nhiên Java với Javascript phổ biến tới vậy.
Bác nào làm tiki vào confirm thằng nào đập thằng nào cái
tôi ko làm tiki nhưng confirm cho nè.
Hồi mới đầu tiki dùng php.
Sau đập đi và dùng java. Khoảng năm ngoái mới rục rịch move qua golang. Nhưng tui nghĩ chặng đường còn dài lắm. Java vẫn là core hiện tại và chắc cũng vài năm nữa.
còn có ai làm tiki thì confirm hộ nếu mình sai ^^
trungpham90
Go thì tôi biết có Grab, Gojek này
Java thì Paypal, Google
Mấy bạn chưa bao giờ làm Java hay lỡ cỡ rồi nhảy sang cái khác luôn ác cảm vì cho rằng Java nó cùi, chậm, dài dòng... Blabla nhưng đâu có biết Java nó luôn tiến hoá để adapt với modern software development.
Tôi dùng cả Go cả Java cho hệ thống bên tôi, ngày trước tôi rất thích Go ở chỗ lightweight phù hợp với môi trường serverless nhưng dạo này Java có GraalVM thì ngon lắm rồi. Tương lai nếu Go k phát triển hơn thì mấy thế mạnh hiện tại sẽ bị thằng Java nó cắn mất. Chắc luôn
Mình nghĩ java cần phải làm nhiều nữa mới có thể cắn thị phần của Go ở mảng infras (đặc biệt là k8s)
+ build time + binary size + build tools/process/dependencies manager: Go build ra fat binary vs tốc độ khá nhanh, quản lý dependencies vs Go module giờ khá tiện nữa so với việc config/quản lý lằng nhằng của java (maven, gradle, ant)
+ memory footprint: GraalVM giúp Java app giảm khá nhiều memory footprint khá nhiều vs native image rồi nhưng vẫn nhiều hơn so vs Go
+ faster start up times: cái này đặc biệt giúp scale app nhanh khi dùng vs HPA
+ cgroups awareness: config/optimize cho JVM based app cũng là một vấn đề để tránh OOM kill, tuy đã hỗ trợ khá ok vs hotspot rồi nhưng đạt đến mức perfect thì chưa
+ GraalVM được develop bởi Oracle, mà mình thì éo ưa + tin tưởng Oracle lắm sau mấy vụ license
Tuy nhiên mấy thằng lớn contribute khá nhiều vô cloud native (ngoài 3 ông lớn Google, AWS, Azure) như RedHat (IBM), OpenSUSE, ... cũng đầu tư nhiều vô Java để giúp nó cloud native hơn nên mình nghĩ trong tương lai sẽ có nhiều hướng để làm vs cloud tùy theo hướng/ngôn ngữ mình thích
Câu Slogan chỉ là câu nói, great
Đoạn bôi đậm mình chả hiểu bạn muốn nói gì nữa
Quay lại vấn đề, bạn thử kể cái project nào trong 5 năm trở lại đây thực sự nổi tiếng được viết bằng Java?
Mình làm cho công ty unicorn startup, quy mô chắc nhất nhì Sài Gòn này. Code chủ yếu bằng Go, TypeScript, Ruby. Còn Javascript thì chả phải hỏi. Trừ khi code system, embed còn không bảo không viết javascript chắc bạn không phải dev, kể cả làm DS, AI đi nữa
Mình nghĩ java cần phải làm nhiều nữa mới có thể cắn thị phần của Go ở mảng infras (đặc biệt là k8s)
+ build time + binary size + build tools/process/dependencies manager: Go build ra fat binary vs tốc độ khá nhanh, quản lý dependencies vs Go module giờ khá tiện nữa so với việc config/quản lý lằng nhằng của java (maven, gradle, ant)
+ memory footprint: GraalVM giúp Java app giảm khá nhiều memory footprint khá nhiều vs native image rồi nhưng vẫn nhiều hơn so vs Go
+ faster start up times: cái này đặc biệt giúp scale app nhanh khi dùng vs HPA
+ cgroups awareness: config/optimize cho JVM based app cũng là một vấn đề để tránh OOM kill, tuy đã hỗ trợ khá ok vs hotspot rồi nhưng đạt đến mức perfect thì chưa
+ GraalVM được develop bởi Oracle, mà mình thì éo ưa + tin tưởng Oracle lắm sau mấy vụ license
Tuy nhiên mấy thằng lớn contribute khá nhiều vô cloud native (ngoài 3 ông lớn Google, AWS, Azure) như RedHat (IBM), OpenSUSE, ... cũng đầu tư nhiều vô Java để giúp nó cloud native hơn nên mình nghĩ trong tương lai sẽ có nhiều hướng để làm vs cloud tùy theo hướng/ngôn ngữ mình thích
Hehe GraalVM còn mới mà còn nhiều dư địa để optimize. Hotspot nó optimize 20 năm trời mới đạt đến performance tám lạng nửa cân với C++ hiện tại chứ ít gì
zerog31
So sánh Golang với C# hay Java hơi sai vì một thằng theo hướng procedural còn hai ngôn ngữ kia theo là OOP. Mà ai làm rồi cũng biết OOP nó lợi cho việc maintain business logic hơn là đua performance. Cá nhân mình chỉ dùng Go nếu muốn
cực nhanh mà không dám dùng C++, dùng Elixir nếu muốn concurency tốt, còn lại thì dùng C# hoặc PHP tùy yêu cầu khách hàng.
Sang mấy sản phẩm lớn, có cái nào viết bằng chỉ một ngôn ngữ back-end đâu. Cái nào phù hợp cho phần nào thì được dùng cho phần đó thôi.
Go mạnh lắm. Bạn nào mới ra trường nên theo.
Khuyên chân thành đấy.
Mình làm c++ lâu, cũng phải bỏ để qua golang
Go đánh giá mỗi cái goroutine thôi. Mà giờ c++20 cũng có. Một thằng stackful vs một thằng stackles. Cơ mà trước khi chuẩn hoá. C++ có mả lib ngoài hỗ trợ vụ này. Cá nhân thấy đỉnh cao vẫn c or c++. Làm gì cũng được per cực cao. Tùy biến tùy chỉnh mái thoải. Chứ cái goroutine stackful , khi sll lại sml.
Còn mấy cái khác thấy bình thường dễ nhìn hơn chút.
Go đánh giá mỗi cái goroutine thôi. Mà giờ c++20 cũng có. Một thằng stackful vs một thằng stackles. Cơ mà trước khi chuẩn hoá. C++ có mả lib ngoài hỗ trợ vụ này. Cá nhân thấy đỉnh cao vẫn c or c++. Làm gì cũng được per cực cao. Tùy biến tùy chỉnh mái thoải. Chứ cái goroutine stackful , khi sll lại sml.
Còn mấy cái khác thấy bình thường dễ nhìn hơn chút.
C C++ đỉnh cao nhưng chẳng ai dùng. Thấy toàn Java.
Go đánh giá mỗi cái goroutine thôi. Mà giờ c++20 cũng có. Một thằng stackful vs một thằng stackles. Cơ mà trước khi chuẩn hoá. C++ có mả lib ngoài hỗ trợ vụ này. Cá nhân thấy đỉnh cao vẫn c or c++. Làm gì cũng được per cực cao. Tùy biến tùy chỉnh mái thoải. Chứ cái goroutine stackful , khi sll lại sml.
Còn mấy cái khác thấy bình thường dễ nhìn hơn chút.
mục đích của go ko phải là thay thế c++ bác ơi.
C++ mạnh nhưng cũng tuỳ tình huống thôi. Có những tình huống ng ta dùng go sẽ phù hợp hơn
bác bảo c++ làm gì cũng dc thì ko sai, nhưng ko phải cái gì dùng c++ cũng là tốt, là phù hợp.
lý do mình bỏ c++ là vì khó phát triển hơn dc nữa, cái prj ở Vn bị giới hạn lắm.
C C++ đỉnh cao nhưng chẳng ai dùng. Thấy toàn Java.
Ko ai rảnh tới mức viết bằng mấy thứ đó tất cả Khó , dễ lỗi. Tốn time đau não dev....
Cơ mà bảo không ai dùng chắc thế giới giờ này đang đốt đèn dầu quá. Thím cứ nghĩ viết java thì java nhất. Có hỏi java tạo lên bằng gì chứ.
Có những chô cần C or C++ đôi khi không thể thay thế.. Cơ mà dạo này ko đặt nặng ngôn ngữ lắm. Cuối cùng thì cũng về với cái register thôi. ( Khó hiểu).
Cơ mà mình không ưa mấy thằng phải dùng tới Vm. Còn doanh nghiệp họ chọn cái gì đều có lý do cả. Không phải cái gì phù hợp ngày hôm nay. Ngày hôm mai vẫn phù hợp. Tương tự cho các cty , dev ...
Các thím hay bám chấp vào vài cái ngôn ngữ. Làm thui chột đi nhiều thứ hay ho...
Dạo này ngồi vọc cái lib đá lẫn Asm thấy hay quá.
c++ vẫn dc dùng ở nhiều nơi, tại bác ko thấy thôi.
Nhưng mà dev VN ít khi nhảy dc vô phần đó, còn lại toàn maintain outsource thôi.
Cái này chuẩn , cảm giác vn đang ở lv gia công "code".
Mong thèn go thay đổi cái goroutine or update cho dùng hai kiểu. Ko thì ăn sao về concurency vs mấy thằng kia.
Tôi giờ ngày nào cũng tự nhủ, ráng mỗi ngày try-hard golang thêm vài tiếng (bên cạnh việc công ty).
Bao gồm đọc sách, code side project, học thêm về distributed system, database.
Cố gắng 1-2 năm nữa lên pro, hy vọng dc lương 4-5k là ổn, khỏi cần ra nước ngoài nữa.
Chắc phải bỏ bớt thú vui gái gú, chơi game lại T_T
bác cho mình hỏi, giờ bác học go từ nguồn nào, mình thấy các tài liệu của go khá ít
Ko ai rảnh tới mức viết bằng mấy thứ đó tất cả Khó , dễ lỗi. Tốn time đau não dev....
Cơ mà bảo không ai dùng chắc thế giới giờ này đang đốt đèn dầu quá. Thím cứ nghĩ viết java thì java nhất. Có hỏi java tạo lên bằng gì chứ.
Có những chô cần C or C++ đôi khi không thể thay thế.. Cơ mà dạo này ko đặt nặng ngôn ngữ lắm. Cuối cùng thì cũng về với cái register thôi. ( Khó hiểu).
Cơ mà mình không ưa mấy thằng phải dùng tới Vm. Còn doanh nghiệp họ chọn cái gì đều có lý do cả. Không phải cái gì phù hợp ngày hôm nay. Ngày hôm mai vẫn phù hợp. Tương tự cho các cty , dev ...
Các thím hay bám chấp vào vài cái ngôn ngữ. Làm thui chột đi nhiều thứ hay ho...
Dạo này ngồi vọc cái lib đá lẫn Asm thấy hay quá.
Cái này chuẩn , cảm giác vn đang ở lv gia công "code".
Mong thèn go thay đổi cái goroutine or update cho dùng hai kiểu. Ko thì ăn sao về concurency vs mấy thằng kia.
vn gia công từ mấy chục năm trc mà bác. Khoảng mấy năm đổ lại đây mới bắt đầu phát triển hơn này.
cái gì cũng cần thời gian tích luỹ mà ^^
bác cho mình hỏi, giờ bác học go từ nguồn nào, mình thấy các tài liệu của go khá ít
ôi đầy.
Bác cứ lên mạng kiếm sách về go. Down về đọc hết là pro thôi
Nói chứ học phải đi với hành nữa.
Mình đang đọc cuốn mastering go
Còn các course học thì cũng nhiều, mình học trên coursera, safari, udemy, nhưng vẫn ko bằng đọc sách đâu bác.
Fire Of Heart
Đây, tối rảnh cầm kindle ngồi đọc. Cả ngày ngồi máy tính chán lắm rồi ^^. Mai lại đọc lại và practice trên máy ^^
ôi đầy.
Bác cứ lên mạng kiếm sách về go. Down về đọc hết là pro thôi
Nói chứ học phải đi với hành nữa.
Mình đang đọc cuốn mastering go
Còn các course học thì cũng nhiều, mình học trên coursera, safari, udemy, nhưng vẫn ko bằng đọc sách đâu bác.
Sao tôi thấy bọn nhỏ nhỏ học dev bây giờ chúng nó lười đọc sách thế nhỉ
Hồi tôi lôi cuốn c++ của bjarne stroustrup thì đứa em nó kêu là giờ tutorial đầy. Mà để làm nhanh thì được, chứ để hiểu sâu thì vẫn phải đọc sách rồi nghiền ngẫm chứ ta
Biết PHP rồi thì ráng tìm ngôn ngữ nào đoàng hoàng mà học lấy nền tảng, cái golang này như side skill thôi chứ try hard làm gì cái ngôn ngữ vớ vẩn này
Bạn cho mình lý do vì sao go là vớ vẩn đi?
lyokha114
Java vẫn là 1 cái gì đó rất đặc biệt so với phần còn lại. Chắc do mình fanboy java
Đang làm java và js, ts có xem qua rust, go, elixir, có mấy điểm thú vị thậ
Java vẫn là 1 cái gì đó rất đặc biệt so với phần còn lại. Chắc do mình fanboy java
Đang làm java và js, ts có xem qua rust, go, elixir, có mấy điểm thú vị thậ
mới chỉ nhìn qua thôi thì không thấy hấp dẫn đâu, phải làm thử mới biết.
rust thì bỏ qua không nói, thằng golang kia compile như gió, chưa đầy 1s đã xong cái project mấy chục nghìn dòng, có thể dùng để thay thế mấy cái scripting language luôn được, lại compile ra được một cái static binary mang đi chạy khắp nơi mà không phải cài dependencies, phải nói là cực tiện. Đáng tiếc là syntax xấu, không expressive như mấy ngôn ngữ khác cho nên mấy thằng khác như crystal hay pony vẫn có cửa.
Elixir thì kinh rồi, live reload tới level hot code swapping, bạn nào dùng rồi mới biết cái này sướng thế nào: ví dụ server đang chạy, phát hiện lỗi, muốn vào debug + fix luôn mà không muốn chạy lại server (vì đang load rất nhiều state) thì có thể dùng cái IEx attach trực tiếp tới cái process đang chạy (local hoặc remote), vào sửa như đúng rồi. Cơ mà không có type system kể ra cũng bất tiện, đang hóng xem thằng Gleam mới ra có gì tốt hơn không.
nói chung có rất nhiều cái phải trải nghiệm mới biết. kiểu làm frontend ngày xưa các bạn phải refresh bằng tay, sau này ra browsersync các kiểu save file cái là nó tự động refresh browser, tới bây giờ thì không có cái hot module replacement của webpack cảm giác đã thấy như quay lại thời kì đồ đá, thì ở backend người ta cũng cảm giác tương tự sau khi đổi từ java sang các ngôn ngữ khác thôi.
Java vẫn là 1 cái gì đó rất đặc biệt so với phần còn lại. Chắc do mình fanboy java
Đang làm java và js, ts có xem qua rust, go, elixir, có mấy điểm thú vị thậ
Đơn giản là Java nó dễ hiểu nhất. Không có con trỏ. Cú pháp không phức tạp. Tập trung vào hướng đối tượng. Đơn giản là ngôn ngữ tốt nhất.
Sao tôi thấy bọn nhỏ nhỏ học dev bây giờ chúng nó lười đọc sách thế nhỉ
Hồi tôi lôi cuốn c++ của bjarne stroustrup thì đứa em nó kêu là giờ tutorial đầy. Mà để làm nhanh thì được, chứ để hiểu sâu thì vẫn phải đọc sách rồi nghiền ngẫm chứ ta
Tư duy ăn xổi mà. Đa số là vậy, ko hiểu bản chất bên dưới của thứ mình đang dùng. Để rồi khi đổi qua 1 cái khác thì lại phải ngồi mò mẫm
Nói chung các bác học vì niềm vui thì học ngôn ngữ nào cũng đc
, như trước mình có sài qua Elixir như thím Nipin ở trên, do cái mình thích học là mindset functional mà scalar cũng có nói chung functional của thằng scala nó ở cái tầng cao hơn. Còn học vì nhu cầu công việc kiếm $ thì học các ngôn ngữ có độ phổ biến cao để mà có việc làm chứ, nhưng phổ biến cao thì nhiều thằng học nhiều thằng cạnh tranh. Học Elixir như bác trên thì ít job nhưng ít thằng học vô kiếm đc jobs bằng ngôn ngữ đó húp $ cũng cao hơn
. Anyway nói chung là giỏi thì éo lo chết đói, do thị trường VN còn outsourcing nhiều, chừng nào VN chỉ toàn làm prod thì các bác lấy ngôn ngữ éo gì cũng đc. Đối với mình thì ngôn ngữ framework nó chỉ là tools để phục vụ cho business là chính thôi.
Java vẫn là 1 cái gì đó rất đặc biệt so với phần còn lại. Chắc do mình fanboy java
Đang làm java và js, ts có xem qua rust, go, elixir, có mấy điểm thú vị thậ
dễ code -> nhưng cũng khiến dễ thành code xấu.
Dễ tuyển người.
Được hỗ trợ nhiều.
nói chung java vẫn Mạnh trên nhiều khía cạnh.
lyokha114
À mà có 1 điểm ở Go là syntax nó khá là khó chịu (đối với minh), kiểu nhìn không thân thiện
À mà có 1 điểm ở Go là syntax nó khá là khó chịu (đối với minh), kiểu nhìn không thân thiện
Mới code Go thì thấy không quen thôi, chứ thực ra toàn đại lão code mấy chục năm ngồi suy nghĩ đống syntax đấy, bỏ đi những cái này nọ ko cần thiết.
Hồi đầu mình cũng ko quen, sau rồi thấy cũng bình thường
Ví dụ như cái chuyện khi khai báo 1 func, để tên trước, type sau cũng là rất nhiều vấn đề liên quan.
Tất nhiên kiểu style này thì cũng khó mà nói kiểu mới là thực sự tốt hơn hay dở hơn cái cũ.
Năm nào chẳng có thằng đào thằng Go lên chửi, tụi hispter thì vẫn cứ đâm đầu vào học rồi tự thẩm với nhau thôi.
Anh Golang không biết theo trường phái gì cái gì cũng không ra hồn chỉ đc cái compile lẹ (vì bản thân ngôn ngữ có features đếch nào đâu mà không lẹ). Đụng vào thì bảo tụi tao là rockstar, đếch cần những thứ đó, simplicity is complicated
Thằng Go mà được dùng đại trà thì còn thảm họa hơn js, php. Sản sinh ra 1 thế hệ chỉ biết copy-paste
Năm nào chẳng có thằng đào thằng Go lên chửi, tụi hispter thì vẫn cứ đâm đầu vào học rồi tự thẩm với nhau thôi.
Anh Golang không biết theo trường phái gì cái gì cũng không ra hồn chỉ đc cái compile lẹ (vì bản thân ngôn ngữ có features đếch nào đâu mà không lẹ). Đụng vào thì bảo tụi tao là rockstar, đếch cần những thứ đó, simplicity is complicated
Thằng Go mà được dùng đại trà thì còn thảm họa hơn js, php.
Sản sinh ra 1 thế hệ chỉ biết copy-paste
Là sao thím, đọc sơ qua thấy go có vẻ syntax cũ kiểu C thì nó phải đào tạo tốt hơn đám php hay js chứ
Năm nào chẳng có thằng đào thằng Go lên chửi, tụi hispter thì vẫn cứ đâm đầu vào học rồi tự thẩm với nhau thôi.
Anh Golang không biết theo trường phái gì cái gì cũng không ra hồn chỉ đc cái compile lẹ (vì bản thân ngôn ngữ có features đếch nào đâu mà không lẹ). Đụng vào thì bảo tụi tao là rockstar, đếch cần những thứ đó, simplicity is complicated
Thằng Go mà được dùng đại trà thì còn thảm họa hơn js, php. Sản sinh ra 1 thế hệ chỉ biết copy-paste
Go mà bác bảo giống JS, PHP. Go nó lai giữa C++ và Python. Có con trỏ và cú pháp dễ đọc. Nhưng chỉ để cho nhân viên Google dùng thôi.
Năm nào chẳng có thằng đào thằng Go lên chửi, tụi hispter thì vẫn cứ đâm đầu vào học rồi tự thẩm với nhau thôi.
Anh Golang không biết theo trường phái gì cái gì cũng không ra hồn chỉ đc cái compile lẹ (vì bản thân ngôn ngữ có features đếch nào đâu mà không lẹ). Đụng vào thì bảo tụi tao là rockstar, đếch cần những thứ đó, simplicity is complicated
Thằng Go mà được dùng đại trà thì còn thảm họa hơn js, php. Sản sinh ra 1 thế hệ chỉ biết copy-paste
Nhìn comment này có vẻ hợp lí này. Vậy thím có thế gợi ý một ngôn ngữ hoàn hảo và đáng học cho anh em xem nào. Cấu trúc gọn nhẹ, không phức tạp, OOP, học nhanh, biên dịch nhanh, cú pháp ổn, đầy đủ chức năng, không bị chửi, có ngoại lệ filter đoàng hoàng, làm được tất cả mọi thứ trên đời ... à mà phải là mà thím đã từng code và có sản phẩm làm niềm tin cho anh em nhé.
Nhìn comment này có vẻ hợp lí này. Vậy thím có thế gợi ý một ngôn ngữ hoàn hảo và đáng học cho anh em xem nào. Cấu trúc gọn nhẹ, không phức tạp, OOP, học nhanh, biên dịch nhanh, cú pháp ổn, đầy đủ chức năng, không bị chửi, có ngoại lệ filter đoàng hoàng, làm được tất cả mọi thứ trên đời ... à mà phải là mà thím đã từng code và có sản phẩm làm niềm tin cho anh em nhé.
Hình như anh này có vấn đề về logic thì phải, tôi bảo go là ngôn ngữ rỗng tếch, đếch có gì hay ho cả. Nó khác với việc tôi bảo có 1 ngôn ngữ có mọi thứ hay ho, hoàn hảo trên đời. Ngôn ngữ hoàn hảo đó thì chắc không có nhưng ngôn ngữ tốt hơn Go thì không thiếu nhé anh (tổng quan trên nhiều phương diện). Còn cái golang chỉ được mỗi cái compile speed với binary gọn nhẹ thôi
Nhìn comment này có vẻ hợp lí này. Vậy thím có thế gợi ý một ngôn ngữ hoàn hảo và đáng học cho anh em xem nào. Cấu trúc gọn nhẹ, không phức tạp, OOP, học nhanh, biên dịch nhanh, cú pháp ổn, đầy đủ chức năng, không bị chửi, có ngoại lệ filter đoàng hoàng, làm được tất cả mọi thứ trên đời ... à mà phải là mà thím đã từng code và có sản phẩm làm niềm tin cho anh em nhé.
thôi cãi nhau làm gì cho mệt. Ông ấy bảo go rỗng tuếch thì cứ kệ ông ấy đi, hơi đâu cãi nhau
) để sức cày mà kiếm tiền bác ạ.
Bảo binary gọn nhẹ thì chắc là đọc linh tinh ở đâu rồi lên mạng chém gió đây mà.
Go nó default là static, nên binary thường khá nặng do nhúng hết lib vào bên trong. Gần đây có nhẹ hơn 1 tí do optimize các kiểu.
Elixir thì kinh rồi, live reload tới level hot code swapping, bạn nào dùng rồi mới biết cái này sướng thế nào: ví dụ server đang chạy, phát hiện lỗi, muốn vào debug + fix luôn mà không muốn chạy lại server (vì đang load rất nhiều state) thì có thể dùng cái IEx attach trực tiếp tới cái process đang chạy (local hoặc remote), vào sửa như đúng rồi. Cơ mà không có type system kể ra cũng bất tiện, đang hóng xem thằng Gleam mới ra có gì tốt hơn không.
nói chung có rất nhiều cái phải trải nghiệm mới biết. kiểu làm frontend ngày xưa các bạn phải refresh bằng tay, sau này ra browsersync các kiểu save file cái là nó tự động refresh browser, tới bây giờ thì không có cái hot module replacement của webpack cảm giác đã thấy như quay lại thời kì đồ đá, thì ở backend người ta cũng cảm giác tương tự sau khi đổi từ java sang các ngôn ngữ khác thôi.
Trò này php làm mấy chục năm nay rồi, có gì cao siêu nhỉ? Mà thực ra http là stateless connection nên có hay không có live load cũng chả quan trọng lắm, cần thiết thì đặt thêm con load balancing là xong
Trò này php làm mấy chục năm nay rồi, có gì cao siêu nhỉ? Mà thực ra http là stateless connection nên có hay không có live load cũng chả quan trọng lắm, cần thiết thì đặt thêm con load balancing là xong
php nó load lại toàn bộ chứ làm gì có livereload?? đùa chứ lần đầu nghe nói luôn
chả lẽ ngày xưa tôi dùng php sai lầm?
mà state ở đây là nói mấy cái trong server, ví dụ như database connection, ví dụ như in memory cache/session các kiểu, sửa code phải restart lại tất cả nhiều khi deplay vài chục giây tới cả phút, ảnh hưởng tới trải nghiệm khi đang code, chứ liên quan quái gì đến http mà stateless với chả load balancing?
lời khuyên thật lòng của tôi với các bạn dev việt là nếu thấy người ta nói cái gì mình không hiểu lắm thì nên google, hoặc hỏi lại cho chắc, không nên phán bừa.
p.s: mà chuyện http stateless cũng là quá khứ rồi, ừ thì http vẫn là stateless, nhưng http/2, websocket thì đều là keepalive connection... mấy cái này server restart đều dẹo cả.
Câu Slogan chỉ là câu nói, great
Đoạn bôi đậm mình chả hiểu bạn muốn nói gì nữa
Quay lại vấn đề, bạn thử kể cái project nào trong 5 năm trở lại đây thực sự nổi tiếng được viết bằng Java?
Mình làm cho công ty unicorn startup, quy mô chắc nhất nhì Sài Gòn này. Code chủ yếu bằng Go, TypeScript, Ruby. Còn Javascript thì chả phải hỏi. Trừ khi code system, embed còn không bảo không viết javascript chắc bạn không phải dev, kể cả làm DS, AI đi nữa
Quoine mới sa thải anh sếp nào đó rồi, tình hình cũng xấu hơn rồi, ko còn sáng sủa như mấy năm trc đâu
Cty này thì drama ko thiếu.
kevin.leptons
Tôi thì thấy Go là ngôn ngữ xấu xí đến phát sợ. Chẳng qua bọn google dùng cho hạ tầng mạng của nó, rồi mấy anh cứ bâu vào khen lấy khen để, cú pháp dễ đọc dễ học, ba la bô lô, nhảm.
Ayemdi
Sáng thì có, nhưng sẽ không nổi hẳn trên bảng xếp hạng như Python hay JavaScript, mà nó lơ lửng ở giữa, chiếm vài chục phần trăm thôi. Như C# là con cưng của Microsoft mà đến nay vẫn lềnh bềnh đâu đó ở thứ 6-7 trong các ngôn ngữ. Người ta thích cái mới, còn Go có hình ảnh câu lệnh của C, rồi có cải tiến thêm thì không hút lắm. Đôi khi người ta đã quá ám ảnh cái ngôn ngữ C, nay thấy cái mới có nét giống thì muốn bỏ chạy cmnr.
Tại sao Google đã sinh Dart rồi, lại còn sinh thêm Go.
Sáng thì có, nhưng sẽ không nổi hẳn trên bảng xếp hạng như Python hay JavaScript, mà nó lơ lửng ở giữa, chiếm vài chục phần trăm thôi. Như C# là con cưng của Microsoft mà đến nay vẫn lềnh bềnh đâu đó ở thứ 6-7 trong các ngôn ngữ. Người ta thích cái mới, còn Go có hình ảnh câu lệnh của C, rồi có cải tiến thêm thì không hút lắm. Đôi khi người ta đã quá ám ảnh cái ngôn ngữ C, nay thấy cái mới có nét giống thì muốn bỏ chạy cmnr.
Tại sao Google đã sinh Dart rồi, lại còn sinh thêm Go.
Dart nó nhái nhái JS làm UI là 9 chứ đâu có làm system language.
Tôi thì thấy Go là ngôn ngữ xấu xí đến phát sợ. Chẳng qua bọn google dùng cho hạ tầng mạng của nó, rồi mấy anh cứ bâu vào khen lấy khen để, cú pháp dễ đọc dễ học, ba la bô lô, nhảm.
Thế có thằng nào viết đẹp dễ hiểu, hiệu năng khá khá tý ko? ko troll hỏi thêm cho biết.
Đẹp nhưng speed khá 1 ty chứ python ruby vốn dĩ chậm rồi.
Thằng Nim eco hẻo quá.
Nói chung vẫn thua go
speed của crystal hay nim ăn đứt go, vì chúng nó backend là LLVM/GCC (nim thì transpile sang c, lúc đó thì dùng clang hay gcc để compile đều được, crystal thì transpile sang llvm opcode), go thì được cái compile nhanh, chứ optimization thì kém hơn (không gõ dùng gcc-go hay go-llvm các kiểu thì có khá hơn không).
cơ mà nim no hope vãi, tôi để ý thằng này từ hồi nó còn tên là nimrod, phải nói là mỗi lần nó ra release mới là một lần giảm hứng thú, core dev toàn quan tâm vấn đề đâu đâu, nhét một đống feature vào mà không suy nghĩ kỹ, implementation cũng half baked, stdlib thì vẫn sơ sài, document thì gần như không có.
crystal thì đầu năm có tí phát triển mà sau đợt covid này lại dẹo rồi, thôi lại đợi năm sau
speed của crystal hay nim ăn đứt go, vì chúng nó backend là LLVM/GCC (nim thì transpile sang c, lúc đó thì dùng clang hay gcc để compile đều được, crystal thì transpile sang llvm opcode), go thì được cái compile nhanh, chứ optimization thì kém hơn (không gõ dùng gcc-go hay go-llvm các kiểu thì có khá hơn không).
cơ mà nim no hope vãi, tôi để ý thằng này từ hồi nó còn tên là nimrod, phải nói là mỗi lần nó ra release mới là một lần giảm hứng thú, core dev toàn quan tâm vấn đề đâu đâu, nhét một đống feature vào mà không suy nghĩ kỹ, implementation cũng half baked, stdlib thì vẫn sơ sài, document thì gần như không có.
crystal thì đầu năm có tí phát triển mà sau đợt covid này lại dẹo rồi, thôi lại đợi năm sau
Làm web thì kiếm kết quả bench web thôi, chứ nhanh mà bench real web use case chậm thì cũng vậy
ạch, tự
cơ mà ấn tượng của tôi là nim/crystal ăn đứt go về performance trong vài bài test của vài individual.
ví dụ:
https://github.com/kostya/benchmarks
techempower thì lâu rồi cũng không vào cho nên không để ý lắm :">
p/s: đệt hôm nay xem lại thì thấy golang performance lên nhanh vãi vkl, đúng là mấy cái này đíu check thường xuyên sẽ thành lạc hậu :"> ngày trước tôi toàn thấy golang toàn chậm x2 x3 so với nim/crystal, giờ thì đã xêm xêm, kinh vl.
ạch, tự
cơ mà ấn tượng của tôi là nim/crystal ăn đứt go về performance trong vài bài test của vài individual.
Go nó ngôn ngữ không quá xấu, simple enough, speed tạm tạm cũng hơn khối ông Node, Ruby, Python, PHP nên giờ đc adopt kha khá chứ chửi nó thì cũng chịu thôi, ko có ngôn ngữ nào vừa long lập trình viên.
Mấy ngôn ngữ lập trình mới mới giờ hy vọng phải có cty lơn chống lưng, mới có đội dev optimize ngày đêm đc
Go nó ngôn ngữ không quá xấu, simple enough, speed tạm tạm cũng hơn khối ông Node, Ruby, Python, PHP nên giờ đc adopt kha khá chứ chửi nó thì cũng chịu thôi, ko có ngôn ngữ nào vừa long lập trình viên.
Mấy ngôn ngữ lập trình mới mới giờ hy vọng phải có cty lơn chống lưng, mới có đội dev optimize ngày đêm đc
thằng nodejs mới tởm lợm, tuy là dynamic language mà performance tương đương với mấy thằng compiled.
cơ mà tôi dùng quen ruby/elixir có stdlib tử tế rồi quay lại mấy thằng nodejs hay golang thấy bất tiện vãi, riêng mấy cái basic function để manipulate array/hashmap đã không bằng.
mà nói cái này lại nhớ thằng swift, mọi thứ đều ngon cơ mà cái stdlib như đấm vào mặt, ví dụ tôi hay evaluate language bằng mấy cái tính năng cơ bản như read file by lines các kiểu, thì trong crystal tôi chỉ cần `File.read_lines(file_path)` là được, swift thì
Code:
if let path = Bundle.main.path(forResource: "TextFile", ofType: "txt") {
do {
let data = try String(contentsOfFile: path, encoding: .utf8)
let myStrings = data.components(separatedBy: .newlines)
TextView.text = myStrings.joined(separator: ", ")
} catch {
print(error)
}
}
à mà cái này là 3.0 còn đỡ, swift 2.0 mới là cái tôi chửi:
Code:
do {
if let path = NSBundle.mainBundle().pathForResource("TextFile", ofType: "txt"){
let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding)
let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
print(myStrings)
}
} catch let err as NSError {
//do sth with Error
print(err)
}
tuy rằng có IDE nó đỡ, cơ mà nhìn mấy cái function name hay constant đều mất mẹ cảm tình
thằng nodejs mới tởm lợm, tuy là dynamic language mà performance tương đương với mấy thằng compiled.
cơ mà tôi dùng quen ruby/elixir có stdlib tử tế rồi quay lại mấy thằng nodejs hay golang thấy bất tiện vãi, riêng mấy cái basic function để manipulate array/hashmap đã không bằng.
mà nói cái này lại nhớ thằng swift, mọi thứ đều ngon cơ mà cái stdlib như đấm vào mặt, ví dụ tôi hay evaluate language bằng mấy cái tính năng cơ bản như read file by lines các kiểu, thì trong crystal tôi chỉ cần `File.read_lines(file_path)` là được, swift thì
Code:
if let path = Bundle.main.path(forResource: "TextFile", ofType: "txt") {
do {
let data = try String(contentsOfFile: path, encoding: .utf8)
let myStrings = data.components(separatedBy: .newlines)
TextView.text = myStrings.joined(separator: ", ")
} catch {
print(error)
}
}
à mà cái này là 3.0 còn đỡ, swift 2.0 mới là cái tôi chửi:
Code:
do {
if let path = NSBundle.mainBundle().pathForResource("TextFile", ofType: "txt"){
let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding)
let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
print(myStrings)
}
} catch let err as NSError {
//do sth with Error
print(err)
}
tuy rằng có IDE nó đỡ, cơ mà nhìn mấy cái function name hay constant đều mất mẹ cảm tình
thằng nodejs mới tởm lợm, tuy là dynamic language mà performance tương đương với mấy thằng compiled.
cơ mà tôi dùng quen ruby/elixir có stdlib tử tế rồi quay lại mấy thằng nodejs hay golang thấy bất tiện vãi, riêng mấy cái basic function để manipulate array/hashmap đã không bằng.
mà nói cái này lại nhớ thằng swift, mọi thứ đều ngon cơ mà cái stdlib như đấm vào mặt, ví dụ tôi hay evaluate language bằng mấy cái tính năng cơ bản như read file by lines các kiểu, thì trong crystal tôi chỉ cần `File.read_lines(file_path)` là được, swift thì
Code:
if let path = Bundle.main.path(forResource: "TextFile", ofType: "txt") {
do {
let data = try String(contentsOfFile: path, encoding: .utf8)
let myStrings = data.components(separatedBy: .newlines)
TextView.text = myStrings.joined(separator: ", ")
} catch {
print(error)
}
}
à mà cái này là 3.0 còn đỡ, swift 2.0 mới là cái tôi chửi:
Code:
do {
if let path = NSBundle.mainBundle().pathForResource("TextFile", ofType: "txt"){
let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding)
let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
print(myStrings)
}
} catch let err as NSError {
//do sth with Error
print(err)
}
tuy rằng có IDE nó đỡ, cơ mà nhìn mấy cái function name hay constant đều mất mẹ cảm tình
Go với rust nó ko có try catch force dev handle error có tâm hơn. Nói chung tôi code 1 thời gian lai thấy hay hơn try catch (này cảm nhận cá nhân thôi)
Go với rust nó ko có try catch force dev handle error có tâm hơn. Nói chung tôi code 1 thời gian lai thấy hay hơn try catch (này cảm nhận cá nhân thôi)
Từ tư bản chủ nghĩa Error Code tiến lên xã hội chủ nghĩa Exception Try-Catch-Finally, thế rồi lại quay về ngày xưa à?
mình viết lib toàn quăng error code để check chứ ghét kiểu quăng exception rồi catch lại lắm
Viết lib thì low-level rồi nên ném error-code để caller handle cũng dễ hiểu. Chứ ở high-level, code toàn modeling domain mà caller cứ phải handle tầng tầng lớp lớp error-code từ callee thì đúng thảm họa
Nguyên tắc của tôi rất đơn giản.
1. Cái gì low-level, gần với infrastructure layer thì error-code hay exception cũng dc, tùy nhóm phát triển muốn thống nhất với nhau ntn.
2. Ở high-level, nhất là với mấy domain model phức tạp thì quất hết exception cho khỏe. Vừa đỡ rối flow, vừa thể hiện dc hết ngữ nghĩa của domain.
Từ tư bản chủ nghĩa Error Code tiến lên xã hội chủ nghĩa Exception Try-Catch-Finally, thế rồi lại quay về ngày xưa à?
Vấn đề là dev dùng throw error vô tôị vạ (tôi cung từng lạm dụng cái chuyện này)
Bên Go nó handle này nhìn hơi rối tý thôi. chứ áp dụng early return pattern thì thấy bt.
Với lại phải đọc code mới biết nó có throw error hay ko. Chư bt ko có document hay đoc src có biết nó throw erro khi nao.
Viết code mà quên try catch lát hồi error văng ra ko trace log này no cũng éo biết error từ function nào.
Đưong nhiên go cũng có cái throw error mạnh tới nỗi sập server đó là panic.
nhưng thương chỉ panic khi nào error nghiêm trọng như app start éo kết nối đc database thì run làm gì nữa.
Code:
func (r *SQLRunner) BeginTx(ctx context.Context, options interface{}) (context.Context, error) {
var SQLTxOptions *sql.TxOptions = nil
if opts, ok := options.(*sql.TxOptions); ok {
SQLTxOptions = opts
}
tx, err := r.db.BeginTx(ctx, SQLTxOptions)
if err != nil {
return nil, err
}
c := context.WithValue(ctx, r.contextKeyTx, tx)
return c, nil
}
Cứ chỗ nào err != nil thì return error ngay. Nhiều người viết 1 đống logic trong cái khúc err != nil thì chả rối.
Từ tư bản chủ nghĩa Error Code tiến lên xã hội chủ nghĩa Exception Try-Catch-Finally, thế rồi lại quay về ngày xưa à?
Cái exception vậy chứ tốn cost nhiều hơn error code nhiều lắm.
Go muốn optimize tốc độ ko thua quá nhiều so với C/C++ nên mình thấy đó cũng là 1 phương án hay.
Vấn đề là dev dùng throw error vô tôị vạ (tôi cung từng lạm dụng cái chuyện này)
Bên Go nó handle này nhìn hơi rối tý thôi. chứ áp dụng early return pattern thì thấy bt.
Với lại phải đọc code mới biết nó có throw error hay ko. Chư bt ko có document hay đoc src có biết nó throw erro khi nao.
Viết code mà quên try catch lát hồi error văng ra ko trace log này no cũng éo biết error từ function nào.
Đưong nhiên go cũng có cái throw error mạnh tới nỗi sập server đó là panic.
nhưng thương chỉ panic khi nào error nghiêm trọng như app start éo kết nối đc database thì run làm gì nữa.
Code:
func (r *SQLRunner) BeginTx(ctx context.Context, options interface{}) (context.Context, error) {
var SQLTxOptions *sql.TxOptions = nil
if opts, ok := options.(*sql.TxOptions); ok {
SQLTxOptions = opts
}
tx, err := r.db.BeginTx(ctx, SQLTxOptions)
if err != nil {
return nil, err
}
c := context.WithValue(ctx, r.contextKeyTx, tx)
return c, nil
}
Cứ chỗ nào err != nil thì return error ngay. Nhiều người viết 1 đống logic trong cái khúc err != nil thì chả rối.
Minh ko dùng go ,tính thử . và theo vi dụ trên thì ko lẽ mỗi lần call một func hay method nao đó thì ta phải check nil hả bác
Do function return 2 biến là result, error thì phải return đủ
Last edited:
nntgwww
Mà làm thưc tế thì cái logic handle error nó nằm ngay dưới cái call func. Nên scan code từ trên xuông dưới biết ngay cai doan handle error của thằng nào.
Quăng vô cái catch thì ko debug tốt bằng. do cái logic nó nằm xa cái thằng throw quá.
Èo, như vi dụ này lỡ nó thành "callback hell" sao bác
Bác đã return rồi còn tiếp tuc gì nữa. Thuong thi đa phần return error chỉ check cái error đặc biệt thôi còn lại error general thì return ra rồi handler middleware gì ây cho no 500 internal error + log lai thôi.
Phải enforces cái style là đã error thì return ngay. Như code vi dụ auth fail , fail chính xác do invalid password or email ko tìm thấy thì return error API ko thì cứ return error thoi. handler middleware thấy return error API thì render theo cái error đó. con error ko xác dinh thì check mấy cái error phổ biến ko có thì render 500 thôi.
Này tuỳ code thực tế tới đâu nữa, usecase của mình tới đó là hết.
Nói chung try catch cũng đâu có ngăn chặn vấn đề đó, thậm chí còn tệ hơn.
Last edited:
trungpham90
Cái hay của Go tôi thấy là viết UT dễ và sướng, concept interface của nó cũng rất hay: parameter consumer định nghĩa interface của parameter đó, chứ ko bị giới hạn bởi type của parameter -> cảm thấy logic hơn nhiều.
Go đề cao tính thực dụng chứ ko phải đề cao 1 ideology nào, nên lướt qua thì thấy có vẻ ko hấp dẫn, nhưng lúc làm nhiều mới thấy bánh cuốn ae ạ.
parameter consumer định nghĩa interface của parameter đó, chứ ko bị giới hạn bởi type của parameter -> cảm thấy logic hơn nhiều.
Ý thím là sao
drnoxxx
Tuy exception cost lớn hơn error-code nhưng có ưu thế cực lớn ở high-level. Vd như modeling một đống domain model phức tạp nhiều component làm việc với nhau mà thằng caller cứ phải quan tâm handle error-code mà callee trả ra thì rất rối rắm và làm phức tạp flow. Vd như khi chuyển tiền bị lỗi thì ném ra OutOfMoneyException() hay LockedAccountException() nó rõ ràng hơn rất nhiều và có thể catch ở chỗ thích hợp trong call chain.
Còn error-code phù hợp hơn ở low-level vì khi đó các component nó phần lớn nằm ở infrastructure layer, bọn nó có couple với nhau cũng không phải là vấn đề gì lớn..
Tuy exception cost lớn hơn error-code nhưng có ưu thế cực lớn ở high-level. Vd như modeling một đống domain model phức tạp nhiều component làm việc với nhau mà thằng caller cứ phải quan tâm handle error-code mà callee trả ra thì rất rối rắm và làm phức tạp flow. Vd như khi chuyển tiền bị lỗi thì ném ra OutOfMoneyException() hay LockedAccountException() nó rõ ràng hơn rất nhiều và có thể catch ở chỗ thích hợp trong call chain.
Còn error-code phù hợp hơn ở low-level vì khi đó các component nó phần lớn nằm ở infrastructure layer, bọn nó có couple với nhau cũng không phải là vấn đề gì lớn..
error khác exception, vd thím đi chơi vs gấu, nếu thím quên không mang tiền thì đó là lỗi, nếu thím bị xe tông thì đó là exception, lạm dụng exception coi chừng có ngày bị ăn gạch vào đầu
ví dụ khác:
a-=1000;
if (a < 0) throw OutOfMoneyException();
b+=1000;
trường hợp này nếu không bắt exception trong hàm thì khả năng cao biến a sẽ bị trừ tiền trong khi b chưa đc cộng tiền mà không ai biết (do khác domain/context). Cách giải quyết là bắt và xử lý exception luôn trong hàm, nhưng như thế còn cồng kềnh hơn error-code.
a-=1000;
if (a < 0) throw OutOfMoneyException();
b+=1000;
trường hợp này nếu không bắt exception trong hàm thì khả năng cao biến a sẽ bị trừ tiền trong khi b chưa đc cộng tiền mà không ai biết (do khác domain/context). Cách giải quyết là bắt và xử lý exception luôn trong hàm, nhưng như thế còn cồng kềnh hơn error-code.
Thực tế thì cái ví dụ của thím bọn ORM lại dùng rất nhiều để rollback transaction. ví dụ của thím thì dùng error code lại càng vỡ mồm vì ORM không rollback lại, thằng a bị trừ tiền mà thằng b vẫn không được cộng
a-=1000;
if (a < 0) return;
b+=1000;
Headhunter050505
Mấy thím cho em hỏi, em mới tập học lập trình, đang định học theo hướng: C++ & OPP => Java
Em cũng có tìm hiểu về Golang và thấy các tiền bối khen nức nỡ như thớt này.
Thời điểm fresher này có nên tìm hiểu golang không ? hay học các cái kia trước
Thanks các thím
Thực tế thì cái ví dụ của thím bọn ORM lại dùng rất nhiều để rollback transaction. ví dụ của thím thì dùng error code lại càng vỡ mồm vì ORM không rollback lại, thằng a bị trừ tiền mà thằng b vẫn không được cộng
Bạn đọc lại nhé, cách của mình là xử lý lỗi ngay trong hàm chứ không throw hay return đi đâu cả, lỗi ở đâu xử lý ở đấy, tránh undefined behavior
Nói chung các bác học vì niềm vui thì học ngôn ngữ nào cũng đc
, như trước mình có sài qua Elixir như thím Nipin ở trên, do cái mình thích học là mindset functional mà scalar cũng có nói chung functional của thằng scala nó ở cái tầng cao hơn. Còn học vì nhu cầu công việc kiếm $ thì học các ngôn ngữ có độ phổ biến cao để mà có việc làm chứ, nhưng phổ biến cao thì nhiều thằng học nhiều thằng cạnh tranh. Học Elixir như bác trên thì ít job nhưng ít thằng học vô kiếm đc jobs bằng ngôn ngữ đó húp $ cũng cao hơn
. Anyway nói chung là giỏi thì éo lo chết đói, do thị trường VN còn outsourcing nhiều, chừng nào VN chỉ toàn làm prod thì các bác lấy ngôn ngữ éo gì cũng đc. Đối với mình thì ngôn ngữ framework nó chỉ là tools để phục vụ cho business là chính thôi.
package A
func x(a TypeA){
a.read()
//...
}
type TypeA interface{
read() int
}
Thì khi function x cần parameter có read function thôi chẳng hạn, thì nó sẽ define TypeA ở ngay bên trong package chứa function x, và khi dùng func x, thì có thể pass bất cứ Type nào vào, chỉ cần Type đó có implement function read.
Cách này làm cho package A loosely couple vs user của package A, đồng thời đảm bảo là package A sẽ chỉ dùng những gì cần dùng, và TypeA definition sẽ closer with business function của package A, thay vì của package tạo ra parameter đó.
Mấy thím cho em hỏi, em mới tập học lập trình, đang định học theo hướng: C++ & OPP => Java
Em cũng có tìm hiểu về Golang và thấy các tiền bối khen nức nỡ như thớt này.
Thời điểm fresher này có nên tìm hiểu golang không ? hay học các cái kia trước
Thanks các thím
Thực tế thì cái ví dụ của thím bọn ORM lại dùng rất nhiều để rollback transaction. ví dụ của thím thì dùng error code lại càng vỡ mồm vì ORM không rollback lại, thằng a bị trừ tiền mà thằng b vẫn không được cộng
Tuỳ context thôi, usual guideline sẽ là exception chỉ nên dùng cho TH mà lỗi đó khiến cho service đó ko thể tiếp tục được nữa, lỗi trong business logic phần lớn sẽ là error.
Critical service thì hầu như ko bao h throw exception, giả sử mỗi thread xử lý 1 transaction cho 1 customer, mà 1 transaction throw exception khiến cả con server restart thì thôi, vỡ cmn mồm.
lovegf88
Build REST API thì Echo hay Gin ngon hơn hở các bác?
Ngoài Echo và Gin ra thì còn thằng nào ngon nữa hở các bác?
Golang sẽ thay thế Nodejs ở các startups, cân vs Netcore/Java ở enterprise dc ko? Các thím cho lời khuyên?
Đang dùng golang đây, golang ngon vl luôn ấy, dùng đa luồng bá đạo nhất trong các ngôn ngữ rồi, mà các dịch vụ bây h phải dùng đa luồng, cái tiếp là deploy 1 project golang cực thích luôn vì build golang rất nhanh mà run thì cũng nhanh không kém, chạy cực đơn giản vì build xong n thành mã máy luôn, ko cần phải chạy máy ảo như java hay chạy thư viện liên kết động như c++
Đang dùng golang đây, golang ngon vl luôn ấy, dùng đa luồng bá đạo nhất trong các ngôn ngữ rồi, mà các dịch vụ bây h phải dùng đa luồng, cái tiếp là deploy 1 project golang cực thích luôn vì build golang rất nhanh mà run thì cũng nhanh không kém, chạy cực đơn giản vì build xong n thành mã máy luôn, ko cần phải chạy máy ảo như java hay chạy thư viện liên kết động như c++
Ngôn ngữ càng bị chửi nhiều chứng tỏ là càng nhiều người dùng, chuyện quá bt.
Chửi 1 ngôn ngữ thì phải nói được use case của các bạn là j. Kn của tôi maintain critical backend microservices, qps 20k chạy ngon trên cluster 80 instances, mỗi ngày xử lý gần 10 triệu transaction, weekly deployment ầm ầm.
Đội dev nhiều người, cần collab nhiều, thì ngôn ngữ nó phải đơn giản, hạn chế những tính năng hack não để tập trung vào dev business feature. Còn 1 người, 1 service thì code go thấy thiếu thiếu, gượng gượng rồi chửi, tôi nghĩ chắc cũng bt.
Use the right tool for the right job. Vậy job của bạn là j? Mà chỉ thấy bàn về tool?
ed của crystal hay nim ăn đứt go, vì chúng nó backend là LLVM/GCC (nim thì transpile sang c, lúc đó thì dùng clang hay gcc để compile đều được, crystal thì transpile sang llvm opcod
Team mình có những thành viên xây dựng hệ thống cho zalo với zing từ ngày đầu nhé, stack của bọn mình là layer storage c++ ( cái này không ngôn ngữ nào có thể thay thế rồi) , service ( golang is best choice), frontend reactjs. Đây là 1 dự án của bọn mình nhé
https://butta.vn/ . Ns chung mảng backend có những cái buộc phải dùng c++ thì ngoài ra dùng golang là best choice , trước mình cũng dev .NEt suốt nhưng h dị ứng với mấy cái máy ảo lắm rồi.
Team mình có những thành viên xây dựng hệ thống cho zalo với zing từ ngày đầu nhé, stack của bọn mình là layer storage c++ ( cái này không ngôn ngữ nào có thể thay thế rồi) , service ( golang is best choice), frontend reactjs. Đây là 1 dự án của bọn mình nhé
https://butta.vn/ . Ns chung mảng backend có những cái buộc phải dùng c++ thì ngoài ra dùng golang là best choice , trước mình cũng dev .NEt suốt nhưng h dị ứng với mấy cái máy ảo lắm rồi.
Đấy, người thật việc thật, sản phẩm thật
Đỡ phải nghe mấy anh chưa từng làm sản phẩm thật nhưng xạo lol riết
Ngồi đọc blog làm cái quái j, đào sâu suy nghĩ về 1 một ngôn ngữ đi, giải quyết các vấn đề của n là được, ngồi nghe mấy thằnd lập trình viên chém gió khác j đẽo cày giữa đồng đâu. Quan trọng mình cần với công việc thế nào, như t , thấy n cực kì hợp lí, n không cần một cái layer trung gian runtime để chạy là 1 lợi thế cho deploy rất tốt rồi, tiếp đến n build rất nhanh ( điều mà c,c++ ko làm được). Cái nữa là việc import thư viện cực kì đơn giản, khác hẳn với c,c++. Một ngôn ngữ giải quyết được vấn đề về portable, deploy, build thì đó là 1 ngôn ngữ tốt. Các hạ tầng bây h chạy theo microservice, phân chia ứng dụng theo chiều ngang chứ ko còn kiểu stacklayer như trước kia, tóm lại chỉ gồm 3 phần layer rõ ràng , low layer ( liên quan tới hệ thống, lưu trữ, ở đây người ta thường dùng c/c++, các hệ quản trị cơ sở dữ liệu hay nosql đều viết bằng c++ hết), tiếp theo layer service ( go được thiết kế với layer service này , tạo các api bằng beego quá nhanh quá gọn, toàn bộ func cho api quảng trị người dùng t có thể viết trong 2 tiếng đổ lại chỉ bằng beego, cần giao tiếp với lowlayer thì sử dụng thrift cực kì nhanh và ổn định), layer UI,UX là cuộc chơi của các lib hay framework js rồi ko phải bàn. Trong trường hợp có những service cần giữ các connection để realtime thì đã có websocket ( golang có hỗ trợ nhé ), và đặc biệt grpc là thứ được sử dụng nhiều nhất trong các kết nối kiểu này ( phần OTT cty t dùng grpc full). Bảo golang là best choice cho starup hoàn toàn có cơ sở vì những tính năng n đem lại, toàn bộ hệ thống OTT, chat ,video call, socialnetwork, livestream ,notification của cty đều được build up theo kiến trúc microservice với bộ 3 c++, golang , js, hệ thống luôn mượt mà và trơn chu nhé, khả năng mở rộng tới hàng tỉ user còn được ( đó là thế mạnh của microservice)
Ngôn ngữ càng bị chửi nhiều chứng tỏ là càng nhiều người dùng, chuyện quá bt.
Chửi 1 ngôn ngữ thì phải nói được use case của các bạn là j. Kn của tôi maintain critical backend microservices, qps 20k chạy ngon trên cluster 80 instances, mỗi ngày xử lý gần 10 triệu transaction, weekly deployment ầm ầm.
Đội dev nhiều người, cần collab nhiều, thì ngôn ngữ nó phải đơn giản, hạn chế những tính năng hack não để tập trung vào dev business feature. Còn 1 người, 1 service thì code go thấy thiếu thiếu, gượng gượng rồi chửi, tôi nghĩ chắc cũng bt.
Use the right tool for the right job. Vậy job của bạn là j? Mà chỉ thấy bàn về tool?
Đồng ý với bạn này.
Thật ra để hỏi ngôn ngữ XYZ nào tương lai sáng không thì chả có một cái foresee nào đủ mạnh để xác thực cả đâu.
Mình lấy ví dụ một ngôn ngữ đã có thời là hot trend nhé: Ruby on Rail. Cách đây 8-10 năm trước thì nó khá hot vì build nhanh một cái web trên nền MVC. Rồi lương ở VN cho Ruby vì thế tăng ào ào trong giai đoạn 2011-2015, nếu không nói quá giai đoạn đó nhiều cty sẵn sàng trả mức lương 1k$ cho người chỉ biết 1 năm exp, nhưng rồi cũng theo thời giai người ta lại nhảy ra chuyển qua Node, giờ nhìn lại thị trường còn bao nhiêu cty ở VN đang hunt Ruby đâu.
Thế nhưng những người giỏi Ruby ở giai đoạn đó thì sao? Không lẽ chết đói? Câu trả lời không đâu, người giỏi người ta lựa chọn ngôn ngữ vì sở thích nhưng kiến thức mới là thứ họ xây dựng. Chủ topic có sài XYZ ngôn ngữ nào, làm dự án nào nhưng tất cả đều xoay quanh kiến thức IT chung cả thôi, đó mới là thứ giúp bạn kiếm ra tiền, chứ kn viết một ngôn ngữ ko giúp bạn đi xa được.
Beego ko nhanh hơn nhưng được cái support tốt hơn, viết api đơn giản hơn, cộng động support nhiều hơn, ns chung cứ beego mà táng vì n theo kiến trúc mvc. Gin n đơn giản quá mức nên mình ko thích dùng kiểu đó, beego n hỗ trợ swagger tận răng, tốc độ cũng samesame nhau thôi.
Bữa cty mình có 1 case hài vl, má nào code Go sài ko đóng transaction hay sao ấy, nó lên connection poll
. Sập,
Nói chung Go nó tường mình rõ ràng nhưng code cũng tỉ mỉ tí là OK. Chứ mấy cái vụ transaction bên thằng Hibernate nó lo cho rồi.
Chuẩn go mà ko tỉ mỉ dễ dính mấy cái vụ ko close connection lắm
))
Cái hay của Go tôi thấy là viết UT dễ và sướng, concept interface của nó cũng rất hay: parameter consumer định nghĩa interface của parameter đó, chứ ko bị giới hạn bởi type của parameter -> cảm thấy logic hơn nhiều.
Go đề cao tính thực dụng chứ ko phải đề cao 1 ideology nào, nên lướt qua thì thấy có vẻ ko hấp dẫn, nhưng lúc làm nhiều mới thấy bánh cuốn ae ạ.
package A
func x(a TypeA){
a.read()
//...
}
type TypeA interface{
read() int
}
Thì khi function x cần parameter có read function thôi chẳng hạn, thì nó sẽ define TypeA ở ngay bên trong package chứa function x, và khi dùng func x, thì có thể pass bất cứ Type nào vào, chỉ cần Type đó có implement function read.
Cách này làm cho package A loosely couple vs user của package A, đồng thời đảm bảo là package A sẽ chỉ dùng những gì cần dùng, và TypeA definition sẽ closer with business function của package A, thay vì của package tạo ra parameter đó.
Cái mà bạn đang nói đến, ko phải Go sáng tác ra đâu, mà thật ra Go impl nó cũng ko tốt hơn gì so với một số ngôn ngữ khác. Để tóm tắt thì có thể đọc về "Prefer Composition over Inheritance" trước.
Java, C# có đầy đủ đồ chơi để impl, khá dễ nhưng ko phải ai cũng làm vì đa số muốn inheritance bởi thiếu kinh nghiệm và hiểu sai về OOP practices. Bản thân dev non tay cũng cho rằng impl Composition to công, rồi ở cty outsource thì cứ bay vào làm tiếp những gì đã có mà ko thắc mắc gì về lớp abstraction này.
Nói tiếp về abstraction thì phần này thuộc về Polymorphic Abstraction, 2 ngôn ngữ khác t biết viết là Rust và Haskell đều hướng programmer đi theo hướng tiếp cận này, thậm chí ko hề đem Inheritance vào ngôn ngữ:
Haskell
Code:
class Show a where
show :: a -> String
instance Show A where
show [impl]
Mà code show/display là nằm sẵn trong std core của ngôn ngữ nên dùng được luôn thông qua Derive ko cần phải define + impl như trên, và dev cũng có thể viết luôn những lớp abstraction này để dùng cho các data struct khác derive.
Cái mà bạn đang nói đến, ko phải Go sáng tác ra đâu, mà thật ra Go impl nó cũng ko tốt hơn gì so với một số ngôn ngữ khác. Để tóm tắt thì có thể đọc về "Prefer Composition over Inheritance" trước.
Java, C# có đầy đủ đồ chơi để impl, khá dễ nhưng ko phải ai cũng làm vì đa số muốn inheritance bởi thiếu kinh nghiệm và hiểu sai về OOP practices. Bản thân dev non tay cũng cho rằng impl Composition to công, rồi ở cty outsource thì cứ bay vào làm tiếp những gì đã có mà ko thắc mắc gì về lớp abstraction này.
Nói tiếp về abstraction thì phần này thuộc về Polymorphic Abstraction, 2 ngôn ngữ khác t biết viết là Rust và Haskell đều hướng programmer đi theo hướng tiếp cận này, thậm chí ko hề đem Inheritance vào ngôn ngữ:
Haskell
Code:
class Show a where
show :: a -> String
instance Show A where
show [impl]
Mà code show/display là nằm sẵn trong std core của ngôn ngữ nên dùng được luôn thông qua Derive ko cần phải define + impl như trên, và dev cũng có thể viết luôn những lớp abstraction này để dùng cho các data struct khác derive.
type Employee struct {
FirstName string
LastName string
TotalLeaves int
LeavesTaken int
}
func (e Employee) GetName() string {
return e.FirstName + " " + e.LastName
}
// ... Other Employee functions
Code:
type Person struct{
Name string
}
func (p Person) GetName() string {
return p.Name
}
// ... Other Person functions
3 cái ở trên ở 3 package khác nhau. Cái hay ở đây là function printName có thể tuỳ ý define interface mà nó muốn nhận, và ko cần biết những chi tiết khác của Employee hay Person. Và nó có thể define 1 cái interface vs naming phù hợp vs cái business scope của nó.
Cái hay ở đây là consumer, ở đây là package chứa printName và producer là package chứa Person vs Employee đều có thể định nghĩa business type mà nó muốn, và cả 3 hầu như ko cần phải biết đến sự tồn tại của nhau, so với Java hay C++, thì type phần lớn được định nghĩa bởi producer package, hoặc là sẽ phải có coupling giữa consumer và producer.
Hay ý ông là package implement function printName phải wrap Employee vs Person bằng wrapper class để làm composition? Như vậy cũng được, tuy nhiên sẽ phải mất thêm 1 layer để translate giữa 3 package vs nhau, rất mệt mỏi.
type Employee struct {
FirstName string
LastName string
TotalLeaves int
LeavesTaken int
}
func (e Employee) GetName() string {
return e.FirstName + " " + e.LastName
}
// ... Other Employee functions
Code:
type Person struct{
Name string
}
func (p Person) GetName() string {
return p.Name
}
// ... Other Person functions
3 cái ở trên ở 3 package khác nhau. Cái hay ở đây là function printName có thể tuỳ ý define interface mà nó muốn nhận, và ko cần biết những chi tiết khác của Employee hay Person. Và nó có thể define 1 cái interface vs naming phù hợp vs cái business scope của nó.
Cái hay ở đây là consumer, ở đây là package chứa printName và producer là package chứa Person vs Employee đều có thể định nghĩa business type mà nó muốn, và cả 3 hầu như ko cần phải biết đến sự tồn tại của nhau, so với Java hay C++, thì type phần lớn được định nghĩa bởi producer package, hoặc là sẽ phải có coupling giữa consumer và producer.
Hay ý ông là package implement function printName phải wrap Employee vs Person bằng wrapper class để làm composition? Như vậy cũng được, tuy nhiên sẽ phải mất thêm 1 layer để translate giữa 3 package vs nhau, rất mệt mỏi.
Chi tiết nhỏ thôi, nhưng làm mới thấy có giá trị.
Vậy bạn có biết Go dựa vào gì để bạn có thể implicit define/specify Interface như vậy ko? Tại sao bọn khác nó vẫn dùng name based bắt buộc programmer phải explicit define trước khi impl ko (Java, Scala, Rust...)
Type/Function assertion đối với kiểu implicit define này của Go chưa đủ tốt để dev hoàn toàn dùng được mà ko lo bug. Và cũng có vài người explode được rồi đó, họ cho rằng đây là design flaw của Go luôn.
Giống như bạn dùng dynamic type lang rồi nó cho bạn flexibility nhưng trade-off cả đó chứ tưởng flexibility mà ngon đâu.
Tôi thấy được cái này mất cái kia.
1. Bình thường nếu tôi khai báo expicit thì cần implement 1 interface IDE có thể gen tất cả các method cần implement cho tôi. Dùng structural typing này thì cái IDE đem đi vứt. (chả lẽ lại bật source của cái interface lên rồi copy paste sang
)
2. Khai báo từng minh thì tôi dùng IDE refactor hàng trăm implement của 1 interface cái một và tôi sure 100% là đếch sót cái nào, còn kiểu implicit như trên thì IDE đem đi vứt (trừ phi nó list hết tất cả các class chứa method của cái interface đó và tôi phải đi soi lại từng cái một). Anh nào hay refactor code codebase to to tí thì cái này là vô cùng cần thiết, tôi đếch muốn ngồi cả ngày để debug chỉ vì rename 1 cái method
3. Tôi muốn impl 1 cái interface mà lỡ gõ sai chính tả thì chắc phải đợi lúc compile mới biết (mà giả sử cái class đó chưa được gán vào đâu hết thì chắc compile cũng xuôi lọt luôn).
Trong khi nếu anh khai báo tường minh:
3. Mấy cái DI Container dựa trên type chắc anh Go cũng không impl được vì biết đc class nào thuộc về interface nào đâu.
4. Tôi muốn xem 1 interface có những impl nào thì cũng chịu chết (chả lẽ 1 cái interface có method read nó list ra cả trăm cái class không liên quan cho tôi xem ?).
5. Auto complete cũng chịu chết, dùng implicit thì anh Go có suggest được tốt thế này không:
6. Khai báo từng minh thì tôi đọc source cũng dễ hơn, đọc 1 cái class thấy nó implement cái interface nào là biết ngay cái method đó để làm gì liền, cái class đó có thể xài trong context nào liền.
Nói chung theo kiểu anh Go thì thằng IDE chẳng khác gì phế vật.
Ở đây tôi bàn về khía cạnh tooling thôi, xài mấy ngôn ngữ typed mà IDE nó cứ trơ người ra thì rất bực. Hồi đó tôi code thử Go trên goland thì ôi thôi, xài IDE như không xài, chả khác gì đang code JS. Code vài dòng là phải bật docs lên để xem vì không biết interface này thằng nào đang impl để mà ném vô, trong khi Java, Kotlin tôi đếch cần phải nhìn docs luôn vì IDE nó suggest, gen code hết rồi.
Nói chung type system ngoài để check type thì còn để support IDE, khai báo càng tường minh thì IDE nó biết anh đang muốn gì mà còn support, mang tiếng là static typing mà IDE cứ trơ người ra thì code khác mịa gì Dương Quá đâu
. Nói chung lập trình thì càng explicit càng tốt, code không phải chỉ có 1 mình bạn đọc mà còn cho người khác, cho IDE nó đọc nữa. Mấy anh cứ chửi thằng Java verbose chứ codebase to lên tí thằng nào cũng quay đầu về với anh Java cả
Last edited:
nmatic912
Sáng chứ, nhiều công ty lớn, unicorn startups sử dụng với cả performance vs cú pháp rất gần gũi nữa. Có điều ecosystem còn tưởng đối nhỏ, bộ thư viện còn ít hơn so với các nn khác như java, .net, nhất là trùm node
(deno mới ra cũng thú vị ấy), một phần nó cũng hơi kén và phù hợp với dự án siu to khổng lồ hơn nên mình ko nghĩ cộng đồng sẽ đc như nodejs. Hiện tại cũng đang code go và đương nhiên sẽ chọn nó nếu dự án siu to khổng lồ, còn không xài gì cũng đc
noneedname
A nào tính dùng beego thì nên cân nhắc vì Orm thằng này t đc report là tệ lắm : global lock, mapping ngu chưa kể có version MR còn quên close connection.
A nào tính dùng beego thì nên cân nhắc vì Orm thằng này t đc report là tệ lắm : global lock, mapping ngu chưa kể có version MR còn quên close connection.
Vậy giờ dùng thằng nào ok hở bác? Em cần build REST API ạ
tthixk
Beego là tốt nhất rồi, mấy cái khác toàn kiểu micro fw chứ ko phải fullstack fw.
Bác trên kia làm ở Vin xài beego, ko biết performance benchmark thế nào nhỉ? Mấy cty to to mình làm qua thì đều ko dùng fw và ORM, lý do là performance kém do phải dùng reflection quá nhiều.
A nào tính dùng beego thì nên cân nhắc vì Orm thằng này t đc report là tệ lắm : global lock, mapping ngu chưa kể có version MR còn quên close connection.
Vậy bạn có biết Go dựa vào gì để bạn có thể implicit define/specify Interface như vậy ko? Tại sao bọn khác nó vẫn dùng name based bắt buộc programmer phải explicit define trước khi impl ko (Java, Scala, Rust...)
Type/Function assertion đối với kiểu implicit define này của Go chưa đủ tốt để dev hoàn toàn dùng được mà ko lo bug. Và cũng có vài người explode được rồi đó, họ cho rằng đây là design flaw của Go luôn.
Giống như bạn dùng dynamic type lang rồi nó cho bạn flexibility nhưng trade-off cả đó chứ tưởng flexibility mà ngon đâu.
Comment của ông chung chung quá. Mind to elaborate? Việc lựa chọn trade off là chuyện bt của swe, làm j có solution hoàn hảo.
Beego là tốt nhất rồi, mấy cái khác toàn kiểu micro fw chứ ko phải fullstack fw.
Bác trên kia làm ở Vin xài beego, ko biết performance benchmark thế nào nhỉ? Mấy cty to to mình làm qua thì đều ko dùng fw và ORM, lý do là performance kém do phải dùng reflection quá nhiều.
từ khi rời .Net tới golang mình còn không có khái niệm orm là gì nữa. Vì tất cả db mình dùng đều là noSQL như leveldb, rockdb, redis hay mongodb, mysql là một cái j đó thật xa lạ là dài dòng
Team mình có những thành viên xây dựng hệ thống cho zalo với zing từ ngày đầu nhé, stack của bọn mình là layer storage c++ ( cái này không ngôn ngữ nào có thể thay thế rồi) , service ( golang is best choice), frontend reactjs. Đây là 1 dự án của bọn mình nhé
https://butta.vn/ . Ns chung mảng backend có những cái buộc phải dùng c++ thì ngoài ra dùng golang là best choice , trước mình cũng dev .NEt suốt nhưng h dị ứng với mấy cái máy ảo lắm rồi.
tôi không hiểu bạn quote tôi làm gì? bảo là bên tôi dùng golang cho nên golang là nhất? hay nói vì tôi dùng golang cho nên performance của golang cao?
thằng nodejs mới tởm lợm, tuy là dynamic language mà performance tương đương với mấy thằng compiled.
cơ mà tôi dùng quen ruby/elixir có stdlib tử tế rồi quay lại mấy thằng nodejs hay golang thấy bất tiện vãi, riêng mấy cái basic function để manipulate array/hashmap đã không bằng.
mà nói cái này lại nhớ thằng swift, mọi thứ đều ngon cơ mà cái stdlib như đấm vào mặt, ví dụ tôi hay evaluate language bằng mấy cái tính năng cơ bản như read file by lines các kiểu, thì trong crystal tôi chỉ cần `File.read_lines(file_path)` là được, swift thì
Code:
if let path = Bundle.main.path(forResource: "TextFile", ofType: "txt") {
do {
let data = try String(contentsOfFile: path, encoding: .utf8)
let myStrings = data.components(separatedBy: .newlines)
TextView.text = myStrings.joined(separator: ", ")
} catch {
print(error)
}
}
à mà cái này là 3.0 còn đỡ, swift 2.0 mới là cái tôi chửi:
Code:
do {
if let path = NSBundle.mainBundle().pathForResource("TextFile", ofType: "txt"){
let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding)
let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
print(myStrings)
}
} catch let err as NSError {
//do sth with Error
print(err)
}
tuy rằng có IDE nó đỡ, cơ mà nhìn mấy cái function name hay constant đều mất mẹ cảm tình
Ông suy nghĩ vậy ngược với tôi vãi, tôi lại thấy cách mà ông nói là fail lại dễ hiểu, dễ dùng, cho performance tốt hơn, về vấn đề viết nhanh hay chậm cũng ko quan trọng lắm
tôi không hiểu bạn quote tôi làm gì? bảo là bên tôi dùng golang cho nên golang là nhất? hay nói vì tôi dùng golang cho nên performance của golang cao?
Để ns golang phù hợp nhất với việc phát triển các dịch vụ hiện tại hoàn toàn có cơ sở, cái quan trọng nhất của một ngôn ngữ xuất phát từ định hướng căn bản ban đầu của ngôn ngữ đó chứ không phải là những thư viện hay frameworkd đồ sộ, đối với .Net hay java , định hướng căn bản của 2 nền tảng này là chạy trên 1 máy ảo nào đó, vì vậy khi triển khai hệ thống buộc phải cài thêm máy ảo vào, mọi chuyện sẽ chẳng có vấn đề gì khi mà toàng bộ stack của 1 hệ thống đều base hoàn toàn trên nền tảng đó, nhưng vấn đề đã hoàn toàn thay đổi nếu project là stack của nhiều ngôn ngữ khác nhau, khi một lập trình viên ở một ngôn ngữ khác muốn sử dụng 1 service được viết bằng .Net, nhưng lại ko biết làm thế nào để khởi chạy service đó ( họ sẽ phải cài .net runtime để có thể chay được), qua đó việc toàn bộ chương trình dược complie dưới dạng mã máy là 1 điều được hướng tới để đáp ứng với điều kiện không phụ thuộc vào bất kì nền tảng nào, chỉ cần copy binary và chạy, mọi thứ hoàn toàn đơn giản, những ngôn ngữ đáp ứng được yêu cầu này đang có c, c++ ,golang. Tuy nhiên c,c++ mắc một yếu điểm khá quan trong đó là project càng lớn, debug càng khó , thời gian biên dịch càng lâu, các vấn đề về con trỏ, leak memory, và vậy là chỉ còn mỗi golang giải quyết được vấn đề đó ( t đã làm qua những , js , c,c++,.Net,java,python còn những ngôn ngữ khác chưa làm nên chưa biết). Đó, trọng tâm của vấn đề nằm ở khả năng triển khai ứng dụng hơn là thư viện hay framwork vì những thứ đó có thể thay đổi hay cải tiến được, còn cái base thì ko bao h thay đổi. Và golang có 1 base quá tốt để phát triển.
Ông suy nghĩ vậy ngược với tôi vãi, tôi lại thấy cách mà ông nói là fail lại dễ hiểu, dễ dùng, cho performance tốt hơn, về vấn đề viết nhanh hay chậm cũng ko quan trọng lắm
ờ nói chung tuỳ nhu cầu sử dụng thôi, nếu bạn viết code để maintain lâu dài hoặc team nhiều người thì càng explicit càng tốt, tôi thì chủ yếu là solo hobby project thì tôi tìm thằng nào viết nhanh/tiện nhất có thể. mà ngoài read line ra tôi còn vài tiêu chuẩn nữa, ví dụ regex có hỗ trợ unicode đầy đủ không, mấy cái string library có unicode aware không, thư viện có đầy đủ không, thư viện không đầy đủ thì xử lý thế nào (lúc này thì khả năng viết binding tới c/c++ library, import/manipulate json/yml/txt, http server/client, socket, process các thứ lại đặt lên bàn cân)...
cơ mà nếu chỉ làm cho webdev thì dùng thằng đíu nào chả được, github/gitlab vẫn dùng ruby on rails, pornhub với đầy đủ tính năng socialnetwork, video playback, livestream các kiểu tôi thấy vẫn dùng php (cơ mà thằng này tôi thì chưa đọc bài nào về stack nó dùng, cho nên không dám chắc lắm, chỉ biết là nó vẫn dùng php)... cho nên tôi thấy ngôn ngữ nào bạn dùng cảm thấy thoải mái nhất, phù hợp nhất thì cứ dùng thôi, cãi nhau về cái này thì chắc đíu bao giờ có ngày kết :/
btw, tôi là thuộc loại early adopter,
https://en.wikipedia.org/wiki/Early_adopter , tôi biết risk ở đâu và xử lý risk như thế nào, các bạn nào mà không quá tự tin vì vụ này thì tốt nhất đừng đú theo tôi, để rồi lại kêu gào khóc lóc. Với lại có nhiều người (giống tôi) thì programming không chỉ là job mà còn là hobby nữa, nhiều khi chém gió là đặt vào vị trí mình là hobbyist chứ không phải là professional, các bạn áp đặt tư tưởng "tôi cần cái này cho công việc công ty" vào thì nói chuyện không hợp đâu
Để ns golang phù hợp nhất với việc phát triển các dịch vụ hiện tại hoàn toàn có cơ sở, cái quan trọng nhất của một ngôn ngữ xuất phát từ định hướng căn bản ban đầu của ngôn ngữ đó chứ không phải là những thư viện hay frameworkd đồ sộ, đối với .Net hay java , định hướng căn bản của 2 nền tảng này là chạy trên 1 máy ảo nào đó, vì vậy khi triển khai hệ thống buộc phải cài thêm máy ảo vào, mọi chuyện sẽ chẳng có vấn đề gì khi mà toàng bộ stack của 1 hệ thống đều base hoàn toàn trên nền tảng đó, nhưng vấn đề đã hoàn toàn thay đổi nếu project là stack của nhiều ngôn ngữ khác nhau, khi một lập trình viên ở một ngôn ngữ khác muốn sử dụng 1 service được viết bằng .Net, nhưng lại ko biết làm thế nào để khởi chạy service đó ( họ sẽ phải cài .net runtime để có thể chay được), qua đó việc toàn bộ chương trình dược complie dưới dạng mã máy là 1 điều được hướng tới để đáp ứng với điều kiện không phụ thuộc vào bất kì nền tảng nào, chỉ cần copy binary và chạy, mọi thứ hoàn toàn đơn giản, những ngôn ngữ đáp ứng được yêu cầu này đang có c, c++ ,golang. Tuy nhiên c,c++ mắc một yếu điểm khá quan trong đó là project càng lớn, debug càng khó , thời gian biên dịch càng lâu, các vấn đề về con trỏ, leak memory, và vậy là chỉ còn mỗi golang giải quyết được vấn đề đó ( t đã làm qua những , js , c,c++,.Net,java,python còn những ngôn ngữ khác chưa làm nên chưa biết). Đó, trọng tâm của vấn đề nằm ở khả năng triển khai ứng dụng hơn là thư viện hay framwork vì những thứ đó có thể thay đổi hay cải tiến được, còn cái base thì ko bao h thay đổi. Và golang có 1 base quá tốt để phát triển.
ờ tóm lại là quote cho vui hả, ờ thế thì bỏ qua. chứ tôi lại tưởng phản đối tôi vì bảo golang official implemention performance nó ăn đứt llvm với gcc dù là compile time chỉ bằng 1/10 thì tôi thấy kinh tởm quá :s
freelancer_coder
Không liên quan mà
@Nipin này là Ser Nya gì đó bên Voz cũ phải không nhỉ?
Cứ thread nào nào về programming language war là lại nhớ tay đó bên VOZ cũ, comment toàn là wall of text và rất hăng máu, cũng quảng bá Ruby, Crystal
Không liên quan mà
@Nipin này là Ser Nya gì đó bên Voz cũ phải không nhỉ?
Cứ thread nào nào về programming language war là lại nhớ tay đó bên VOZ cũ, comment toàn là wall of text và rất hăng máu, cũng quảng bá Ruby, Crystal
ờ đúng rồi, ngoài tôi ra thì còn thằng nào viết wall of text nữa mà còn phải thắc mắc :-<
p/s: cơ mà tôi đíu hiểu lắm, cách comment của tôi ở diễn đàn quốc tế bình thường vkl, về việt nam toàn thấy bảo là hăng máu các kiểu.
// đùa chứ các bạn vào hackernews xem mấy chúng nó comment toàn full màn hình, tôi đã là cái gì
Hợ hợ tôi chả cãi nhau nát vơi ông bên voz cũ
Big community thì toxic là bt vì quá nhiều nước. Small thì quanh đi quẩn lại có mấy ông thôi. ko thương nhau đã chớ cắn nhau tối ngày. Nói chung thấy dev việt chỉ lo tối ngày cãi nhau nhanh chậm vô bổ.
có thời gian thì cải thiện cái này
độ đóng góp còn thua thằng Nigga châu phi, Iran hồi mọi nữa.
Trong khi là top 20 country clone + fork project nhiều của thế giới
ờ đúng rồi, ngoài tôi ra thì còn thằng nào viết wall of text nữa mà còn phải thắc mắc :-<
p/s: cơ mà tôi đíu hiểu lắm, cách comment của tôi ở diễn đàn quốc tế bình thường vkl, về việt nam toàn thấy bảo là hăng máu các kiểu.
Hăng máu là khen ông mà? Energetic, enthusiastic... đó
Big community thì toxic là bt vì quá nhiều nước. Small thì quanh đi quẩn lại có mấy ông thôi. ko thương nhau đã chớ cắn nhau tối ngày. Nói chung thấy dev việt chỉ lo tối ngày cãi nhau nhanh chậm vô bổ.
Editor wars, programming language wars...Tây ta gì chả nhiều. Không bao giờ giải quyết được điều gì, có mấy luận điểm cứ lặp đi lặp lại, không bao giờ đi đến đâu nhưng mà cứ khơi ra là lại có một đống comments.
Thread này cũng lên page 10 rồi đó
Editor wars, programming language wars...Tây ta gì chả nhiều. Không bao giờ giải quyết được điều gì, có mấy luận điểm cứ lặp đi lặp lại, không bao giờ đi đến đâu nhưng mà cứ khơi ra là lại có một đống comments.
Thread này cũng lên page 10 rồi đó
Nhưng mà tụi nó war nhiều thì cũng có nhiều community hỗ trợ nhau nhiều. Còn từ ngày tôi chơi voz cái gì mà thấy dính dáng tới lập trình thì cũng js cùi, go cùi, .net, java is da best. Quanh đi quẩn lại cũng vậy.
Nhưng mà tụi nó war nhiều thì cũng có nhiều community hỗ trợ nhau nhiều. Còn từ ngày tôi chơi voz cái gì mà thấy dính dáng tới lập trình thì cũng js cùi, go cùi, .net, java is da best. Quanh đi quẩn lại cũng vậy.
ờ có giai đoạn tôi cũng đéo thèm vào box cntt, quay đi quẩn lại chỉ có java, c# là nhất, chán chả buồn chém. kể ra như cậu naiveryan kia dùng rust ở vn là hàng hiếm lẽ ra cần nên nâng niu, nhưng mà tôi thói quen bashing rust rồi cho nên không kiềm chế được (mẹ mấy thằng rust trannies mỗi lần nói rust không tốt là nó downvote cho âm điểm)
p/s: on topic một tý thì bạn nào nếu đọc comment của tôi dùng nick cũ ở forum cũ thì có thể thấy là tôi khen golang chắc cũng từ năm 2015 rồi (giờ tôi chán rồi đéo khen nữa), đừng bảo là tôi bài go. cái chính là go nó không hợp ý tôi cho nên tôi không dùng thôi :/
ờ tóm lại là quote cho vui hả, ờ thế thì bỏ qua. chứ tôi lại tưởng phản đối tôi vì bảo golang official implemention performance nó ăn đứt llvm với gcc dù là compile time chỉ bằng 1/10 thì tôi thấy kinh tởm quá :s
Tuy perfomace ko bằng c,c++ thôi chứ đa phần các ngôn ngữ hiện tại ko thẻ bằng go đk
rust thì bỏ qua không nói, thằng golang kia compile như gió, chưa đầy 1s đã xong cái project mấy chục nghìn dòng, có thể dùng để thay thế mấy cái scripting language luôn được, lại compile ra được một cái static binary mang đi chạy khắp nơi mà không phải cài dependencies, phải nói là cực tiện. Đáng tiếc là syntax xấu, không expressive như mấy ngôn ngữ khác cho nên mấy thằng khác như crystal hay pony vẫn có cửa.
Tôi vẫn theo dõi bước tiến của Nim và Crystal. Theo tôi đấy vẫn là 2 ngôn ngữ có triển vọng tốt, dù rằng cần có hướng phát triển đúng đắn hơn!
Tuy perfomace ko bằng c,c++ thôi chứ đa phần các ngôn ngữ hiện tại ko thẻ bằng go đk
cái này thì thực sự rất khó nói, vì implementation của một ngôn ngữ nhiều khi nó chỉ phụ thuộc vào đã có bao nhiêu tài nguyên đổ vào optimize cho ngôn ngữ đó, chứ không phải là design, tất nhiên một số ngôn ngữ sử dụng non zero cost abstraction thì về lý thuyết là sẽ không nhanh bằng mấy thằng low level bare metal, nhưng mà ngày trước thằng luajit xuất hiện vả thẳng mặt các đàn anh thì câu chuyện nó trở nên phức tạp hơn khá nhiều.
quay lại thì c/c++ thực ra chỉ là reference, backend để biến c/c++ code sang executable thì nó là mấy cái compiler như gcc/clang tôi nói ở trên. Mà gcc/clang thì ngoài dùng cho c/c++ ra thì nó còn dùng cho cả tá ngôn ngữ khác nữa, trong đó có thằng nim và crystal kia (crystal thì chỉ dùng llvm thôi chứ không support gcc, nhưng mà cái này là ngoài lề), cho nên mấy ngôn ngữ mà backend là gcc hay llvm thì tốc độ hầu như là xêm xêm cả.
hai thằng gcc/clang thì như bạn cũng biết rồi đấy, ra code rất effective nhưng thời gian compile thì cực dài, go thì ngược lại, thời gian compile thì cực ngắn, nhưng vì thế thì cũng mất rất nhiều optimization, cho nên bảo go nhanh hơn mấy thằng kia nói thật với tôi rất khó tin, một thằng compile mất 10 phút mới ra binary mà chạy chậm hơn golang compile trong 2s thì còn mặt mũi nào với bàn dân thiên hạ?
btw, tôi cũng ít theo dõi golang, chỉ nhớ là thời gian đầu mấy cái benchmark thì tốc độ của go chỉ nhỉnh hơn mấy thằng interpreted, cơ mà mấy hôm trước check lại thì thấy cũng đã ngang ngửa java, thuộc tier 2 rồi, nói chung cũng khá shock, nhưng mà theo tôi thấy thì trừ khi golang vứt bỏ cái lợi thế compilation time (hoặc chia nhiều optimization level) ra thì kiểu gì cũng chậm hơn thôi, làm sao hack được physic?... cơ mà cái này cũng đíu chắc, lão Mike Pall viết luajit giờ sang làm cho google rồi, mà lão này thì trình viết language backend tởm vkl.
Big community thì toxic là bt vì quá nhiều nước. Small thì quanh đi quẩn lại có mấy ông thôi. ko thương nhau đã chớ cắn nhau tối ngày. Nói chung thấy dev việt chỉ lo tối ngày cãi nhau nhanh chậm vô bổ.
độ đóng góp còn thua thằng Nigga châu phi, Iran hồi mọi nữa.
Trong khi là top 20 country clone + fork project nhiều của thế giới
không cãi nhau thì làm sao tiến bộ, tôi thấy cá biệt một số thành phần (ở vn thì đúng là nhiều) toàn cãi liều ra thì hầu hết người ta đều một tay gõ phím một tay lướt google, không cãi nhau thì làm sao biết concept mới mà mở rộng kiến thức, không nhiều kiến thức thì làm sao có hứng viết open source?
nntgwww
Cãi nhau trong voz này tôi gom lại rồi đó
js cùi, go cùi, .net, java is da best
. Vấn đề là cãi nhưng chả có giúp ich đc gì. Box thì toàn clone đi đa nhân cách, troll ngu
Như tôi tham gia mấy group FB thấy giá trị hơn nhiều, vì có người hỏi bài, có người chia sẻ thông tin, news. này nọ. bản thân tôi cũng ráng trả lời cái gì mình biết. FB group ăn đứt box cntt voz phải 5 lần.
ngôn ngữ nào thì chả có pros and cons. Nhưng tôi thấy trong đây chỉ thấy dựa vào cons rồi đánh giá nó thua cái ngôn ngữ
X tao đang xài.
cái này thì thực sự rất khó nói, vì implementation của một ngôn ngữ nhiều khi nó chỉ phụ thuộc vào đã có bao nhiêu tài nguyên đổ vào optimize cho ngôn ngữ đó, chứ không phải là design, tất nhiên một số ngôn ngữ sử dụng non zero cost abstraction thì về lý thuyết là sẽ không nhanh bằng mấy thằng low level bare metal, nhưng mà ngày trước thằng luajit xuất hiện vả thẳng mặt các đàn anh thì câu chuyện nó trở nên phức tạp hơn khá nhiều.
...
Nhắc tới mấy cái optimize nhớ hồi còn học đại học thì học assembly/microprocessor. Cùng là code assembly nếu muốn optimize cũng ra performance rất khác nhau. Nhớ đại khái kiểu cùng lệnh MOV mà giữa register thì tốn vài ba clocks, còn chỗ khác thì tốn nhiều clocks, hay mấy lệnh đơn giản kiểu MOV thì tốn vài clocks còn mấy lệnh phức tạp kiểu DIV, MUL thì tốn cả trăm clocks. Nên ở assembly level cũng optimize kiểu thay lệnh phức tạp bằng các lệnh đơn giản để bớt được ít clocks, hay tận dụng dữ liệu ở register để thao tác, đủ các tricks để optimize từng chỗ...Mà mỗi dòng processor lại còn mỗi khác, chứ không phải code assembly nào cũng nhanh.
Cơ mà học xong thường là quên hết mịe nó vì có dùng bao giờ đâu, mấy cái low level ấy thực tế chả cần mấy (trừ chỗ rất cần nhưng chả đến lượt).
Giờ chỉ HTML/JS/CSS với cái backend bất kỳ là đã làm mệt nghỉ để kiếm sống rồi. Mấy cái war này nhiều khi xem thì cũng google đọc tí cho biết nhưng mà cuối cùng thì ngoài để chém gió thì cũng chả thấy được gì
không cãi nhau thì làm sao tiến bộ, tôi thấy cá biệt một số thành phần (ở vn thì đúng là nhiều) toàn cãi liều ra thì hầu hết người ta đều một tay gõ phím một tay lướt google, không cãi nhau thì làm sao biết concept mới mà mở rộng kiến thức, không nhiều kiến thức thì làm sao có hứng viết open source?
Thím cũng cãi nhau nhiều rồi vậy có cái opensource nào chưa để mình vào star
Với lại tóm tắt cái mấy cái kiến thức học được từ lang war/editor war dùng như thế nào trong project của thím với
Cãi nhau trong voz này tôi gom lại rồi đó . Vấn đề là cãi nhưng chả có giúp ich đc gì. Box thì toàn clone đi đa nhân cách, troll ngu
Như tôi tham gia mấy group FB thấy giá trị hơn nhiều, vì có người hỏi bài, có người chia sẻ thông tin, news. này nọ. bản thân tôi cũng ráng trả lời cái gì mình biết. FB group ăn đứt box cntt voz phải 5 lần.
Bên Group FB chỉ dành cho mấy cháu đang đi học thôi. Còn Voz là nơi tập trung những người đi làm rồi muốn nâng cao kiến thức. Mấy group FB tuổi gì mà so sánh.
Thím cũng cãi nhau nhiều rồi vậy có cái opensource nào chưa để mình vào star
Với lại tóm tắt cái mấy cái kiến thức học được từ lang war/editor war dùng như thế nào trong project của thím với
có, persona mới của tôi đi kèm với cái github luôn (các nick cũ cũng có đống projects cũ cơ mà tôi lỡ tay xoá hết rồi)
github.com/nipinium
vào star hết cho tôi đi bạn ơi :x :x
Cơ mà học xong thường là quên hết mịe nó vì có dùng bao giờ đâu, mấy cái low level ấy thực tế chả cần mấy (trừ chỗ rất cần nhưng chả đến lượt).
Giờ chỉ HTML/JS/CSS với cái backend bất kỳ là đã làm mệt nghỉ để kiếm sống rồi. Mấy cái war này nhiều khi xem thì cũng google đọc tí cho biết nhưng mà cuối cùng thì ngoài để chém gió thì cũng chả thấy được gì
kiếm sống thì bạn làm 3 4 tháng là đủ sống cho cả năm rồi, không giải trí chém gió thì làm gì
cơ mà tôi không thấy học nhiều là thiếu. ví dụ đợt trước tôi làm tư vấn cho một dự án, có thằng client phàn nàn là nó import csv vào excel nó hiện sai tiếng việt, hỏi có cách nào khác không (vì file rất to cho nên thằng dev nó dùng csv), cậu dev thì bảo đấy là hạn chế của excel, đưa ra một cái link hướng dẫn import csv tiếng việt vào excel, nói chung cũng giải quyết vấn đề. cơ mà khách bảo người sử dụng cuối không rành IT, với lại có thể ra cửa hàng in không dùng bản excel mới nhất, có thể sẽ thọt. tôi nhìn qua bảo luôn "sao không thử để encoding là utf16 thay vì utf8", vì tôi sau thời gian dài chém gió trên mạng (tất nhiên đéo phải ở voz, ở đây tôi hầu như chả học được cái gì) thì biết windows nó internal encoding là UTF-16 little-endian, cho nên rất có nhiều khả năng là nó support cái encoding này ngay từ đầu.
mấy chuyện tương tự có rất nhiều, ví dụ bạn có thể dùng cái location của nginx để map các service khác nhau vào cùng một domain, đỡ mất công phải setting CORS (tất nhiên cái này tuỳ dự án), dùng systemd để quản lý service thay vì dùng mấy cái 3rd party process manager như pm2 hoặc heroku (cái này thì tôi biết hoàn toàn là do chúng nó hồi đó chửi nhau là có nên dùng systemd hay không)
C++ ở đây là giúp đọc dữ liệu từ nosql nhanh hơn à thím .
Các bạn đa phần quen với việc sử dụng các db có săn như mysql hay mongodb rồi nên ít động tới c++ , bản chất của việc viết lên các db đó 99% các db kể cả RMDB hay noSQL đều được viết bằng c++, việc phát triển tinh năng mới cho db dựa vào các open source có sẵn thì buộc bạn phải can thiệp vào cấp độ low level , tức là phải làm việc với c++, để ý sẽ thấy mỗi một tập đoàn lớn đều sử dụng db riêng do mình phát triển để tự kiếm soát được toàn bộ hiệu năng của hệ thống, google có leveldb
https://github.com/google/leveldb , facebook có rockdbs
https://github.com/facebook/rocksdb, zalo vn có zdb .;., chìa khóa thành công của một tập đoàn làm product lớn là họ có thể kiếm soát hoàn toàn mã nguồn từ layer thấp nhất tới cao nhất hay không ( đó là lí do tại sao mỗi cty luôn cố phát triển một kiến trúc lữu trữ ở level thấp thay vì dùng luôn sản phẩm của bên thứ 3) với fb họ thậm chí còn làm bản mysql riêng tích hợp rockdbs
http://myrocks.io/ , ở việt nam sự thành công của vng cũng đến từ điều này, kiểm soát toàn bộ sản phẩm cuả mình, biết được lí do tại sao hiệu năng chậm, khi bạn sử dụng một service của bên thứ 3 có nghĩa là bạn đã phải đặt hoàn toàn niềm tin vào service đó rồi ( điều đó rất nguy hiểm nếu service đó chưa thực sự tốt, chưa thực sự trưởng thành hoặc đơn giản n không phù hợp với hướng phát triển của cty bạn), đừng nghĩ việc sử dụng thư viện này thư viện nọ một cách bừa bãi ( cứ cho rằng rất nhiều cty lớn n dùng đi) phải hiểu được n có phù hợp với tính chất của cty mình không, có thể phát triển thêm j ở mã nguồn của n để phù hợp với sản phẩm của mình hay không, cái đó là điều quan trọng . Tất nhiên không phải cái nào mình cũng có thể kiểm soát hết được nhưng cố gắng kiếm soát được càng nghiều càng tốt, thì sản phẩm của mình mới chạy ngon được. Cty mình cũng có bộ lưu trữ tự phát triển riêng ( thực ra bộ đó do những thành viên đầu tiên của vng đã phát triển cho zalo đem sang), khi 1 dịch vụ bị chậm thì mn có thể cùng nhau phân tách tới tận level thấp để tối ưu tốt nhất có thể. Cái người tối ưu ở level thấp tất nhiên phải biết về c++ rồi , ko thì cũng chịu ko làm được j cả.
bác có thể nói rõ về user-case của c++ trong trường hợp này cụ thể là gì không ? Em thấy làm webservice nó chủ yếu bottleneck ở DB, chứ còn cần gì đến tính toán CPU-bound đâu mà phải cho c++ vào nhỉ. Có lẽ nào bác tự implement một cái DBMS riêng :> mà kể cả thế đi nữa, thì DBMS nó cũng thường phụ thuộc vào số lượng RAM là chính, CPU nằm chơi có chạy mấy đâu.
Đúng rồi đó, botteck ở db là nguyên nhân chính, như bên mình sử dụng full noSQL luôn, 1 trong những vấn đề ở noSQL so với mySQL là phần id n ko được đánh tự động, mình phải viết 1 service để đánh id cho các bản ghi, để làm điều đó phải có 1 service , ở đây service thrift của mình hoàn toàn viết bằng c++, và can thiệp trực tiếp tới db c++ để giải quyết vấn đề concurentcy và atomic khi đánh id. Bạn nào quan tâm tới việc viết 1 db lưu trữ như thế nào thì có thể đọc bài này , n sẽ hướng dẫn làm thế nào để xây dựng 1 db lưu trữ cho riêng mình
https://medium.com/zalopay-engineer...vice-bằng-go-và-c-phần-1-storage-565b1a3f7e1b. Những db lưu trữ thực chất sử dụng những func liên quan tới đọc ghi file , vấn để ở chỗ bạn tổ chức lưu như thế nào để lấy ra được bằng 1 cách nhanh nhất.
có, persona mới của tôi đi kèm với cái github luôn (các nick cũ cũng có đống projects cũ cơ mà tôi lỡ tay xoá hết rồi)
github.com/nipinium
vào star hết cho tôi đi bạn ơi :x :x
Nhìn sơ qua cái kemalcr thấy có vẻ hay đó nhỉ. Crystal đã có cái ORM nào ổn ổn như Sequel hay AR bên Ruby chưa thím?
Thím có vẻ kỳ công với crystal sao không làm CR advocate cho trọn đi. Lập topic riêng PR, review về các lib/tool thông dụng, tutorial làm các cái đơn giản cho sinh viên, người tò mò vọc.
Nhìn sơ qua cái kemalcr thấy có vẻ hay đó nhỉ. Crystal đã có cái ORM nào ổn ổn như Sequel hay AR bên Ruby chưa thím?
Thím có vẻ kỳ công với crystal sao không làm CR advocate cho trọn đi. Lập topic riêng PR, review về các lib/tool thông dụng, tutorial làm các cái đơn giản cho sinh viên, người tò mò vọc.
đợi nó ra version 1.0 đã bạn, chứ nó chưa stable tôi cũng ngại pr lắm
orm của crystal thì có nhiều mà tôi cũng chưa thấy thằng nào thực sự ngon:
- overall thì thằng luckyframework có cái avram orm là tốt nhất, feature nhiều, đặc biệt là cực kỳ type safe, cơ mà tôi éo thích
- đi kèm với amberframework thì có cái gọi là granite, cái này thì chỉ là orm cơ bản, chả có chức năng vẹo gì đáng kể
- jennifer orm: thằng này tính năng cũng nhiều, cơ mà y hệt 3 thằng trên là hiện tại hỗ trợ postgresql custom type không tốt lắm (tôi cần citext để có case insensitive)
- crecto: thằng này ăn theo ecto của elixir, nhưng tính năng không bằng một góc, với lại cũng ngừng phát triển rồi thì phải
- clear orm: tôi đang nhắm thằng này, về cơ bản thì khá phù hợp nhu cầu, cơ mà single dev cho nên phát triển chậm vãi, mãi cũng chưa có phần migration tử tế, mấy cái polymorphism nghe cũng hay ho mà nó wip từ đầu năm rồi không xong
nói chung cũng hơi chán, cái luckyframework orm hiện tại chắc là ngon nhất rồi cơ mà quá opinionated tôi không quá thích
thư viện ngon thì phần lớn là port từ ngôn ngữ khác chứ bảo là ngon hẳn thì hầu như là chưa có (cơ mà ít nhất nó cũng hơn thằng nim
, ít nhất thằng này mấy cái thư viện nổi tiếng của c/c++ thì đều có binding cả, dù là chưa hoàn thiện, thằng nim thì hầu như là phải tự viết
)
cơ mà như thường lệ, thì thằng crystal có cái này:
https://github.com/veelenga/awesome-crystal index tất cả thư viện thì có mấy website, hiện tại thì thằng này là trội nhất:
https://crystalshards.org/ nói chung là không có công ty to backup cho nên còn non trẻ lắm, multi thread thỉnh thoảng vẫn coredump
Tôi thấy được cái này mất cái kia.
1. Bình thường nếu tôi khai báo expicit thì cần implement 1 interface IDE có thể gen tất cả các method cần implement cho tôi. Dùng structural typing này thì cái IDE đem đi vứt. (chả lẽ lại bật source của cái interface lên rồi copy paste sang
)
View attachment 64848 2. Khai báo từng minh thì tôi dùng IDE refactor hàng trăm implement của 1 interface cái một và tôi sure 100% là đếch sót cái nào, còn kiểu implicit như trên thì IDE đem đi vứt (trừ phi nó list hết tất cả các class chứa method của cái interface đó và tôi phải đi soi lại từng cái một). Anh nào hay refactor code codebase to to tí thì cái này là vô cùng cần thiết, tôi đếch muốn ngồi cả ngày để debug chỉ vì rename 1 cái method
3. Tôi muốn impl 1 cái interface mà lỡ gõ sai chính tả thì chắc phải đợi lúc compile mới biết (mà giả sử cái class đó chưa được gán vào đâu hết thì chắc compile cũng xuôi lọt luôn).
Trong khi nếu anh khai báo tường minh:
View attachment 64854 3. Mấy cái DI Container dựa trên type chắc anh Go cũng không impl được vì biết đc class nào thuộc về interface nào đâu.
4. Tôi muốn xem 1 interface có những impl nào thì cũng chịu chết (chả lẽ 1 cái interface có method read nó list ra cả trăm cái class không liên quan cho tôi xem ?).
View attachment 64849 5. Auto complete cũng chịu chết, dùng implicit thì anh Go có suggest được tốt thế này không:
View attachment 64850 View attachment 64851 6. Khai báo từng minh thì tôi đọc source cũng dễ hơn, đọc 1 cái class thấy nó implement cái interface nào là biết ngay cái method đó để làm gì liền, cái class đó có thể xài trong context nào liền.
Nói chung theo kiểu anh Go thì thằng IDE chẳng khác gì phế vật.
Ở đây tôi bàn về khía cạnh tooling thôi, xài mấy ngôn ngữ typed mà IDE nó cứ trơ người ra thì rất bực. Hồi đó tôi code thử Go trên goland thì ôi thôi, xài IDE như không xài, chả khác gì đang code JS. Code vài dòng là phải bật docs lên để xem vì không biết interface này thằng nào đang impl để mà ném vô, trong khi Java, Kotlin tôi đếch cần phải nhìn docs luôn vì IDE nó suggest, gen code hết rồi.
Nói chung type system ngoài để check type thì còn để support IDE, khai báo càng tường minh thì IDE nó biết anh đang muốn gì mà còn support, mang tiếng là static typing mà IDE cứ trơ người ra thì code khác mịa gì Dương Quá đâu
. Nói chung lập trình thì càng explicit càng tốt, code không phải chỉ có 1 mình bạn đọc mà còn cho người khác, cho IDE nó đọc nữa. Mấy anh cứ chửi thằng Java verbose chứ codebase to lên tí thằng nào cũng quay đầu về với anh Java cả
Ông bạn h tranh luận có point hơn này +1
Tôi dùng Goland thấy khá ổn, refactoring cũng ngon mà sao ông bạn chê nhỉ? Nhiều người còn xài Vim nữa vẫn code ầm ầm.
Nếu stick vs Java, heavily dựa trên IDE và ideology của nó là mọi thứ đều phải là Object thì sẽ thấy khó chịu.
Nhưng ideology của Go là mọi thứ ko cần phải là Object, và interface thì chỉ nên định nghĩa ở lớp trên cùng của package, nơi mà cần phải giao tiếp với những package khác, nói chung nó khiến code đơn giản hơn và ko quá lạm dụng inheritance.
DI thì yeah, cũng có lúc thấy thiếu, cái này cũng là 1 khía cạnh khá controversial, vì argument là nếu structure ko phức tạp thì khỏi cần DI -> cũng hơi cảm tính.
Codebase thì tôi đã đụng vào mono-repo của Grab dùng Go, còn Java thì là mono-repo của Google, thì cảm thấy Google khó chịu hơn, vì Java có quá nhiều thứ behind the scene, đương nhiên là cảm tính thôi, bản thân 2 cty cũng khác nhau.
Tôi dùng Goland thấy khá ổn, refactoring cũng ngon mà sao ông bạn chê nhỉ? Nhiều người còn xài Vim nữa vẫn code ầm ầm.
Nếu stick vs Java, heavily dựa trên IDE và ideology của nó là mọi thứ đều phải là Object thì sẽ thấy khó chịu.
Nhưng ideology của Go là mọi thứ ko cần phải là Object, và interface thì chỉ nên định nghĩa ở lớp trên cùng của package, nơi mà cần phải giao tiếp với những package khác, nói chung nó khiến code đơn giản hơn và ko quá lạm dụng inheritance.
DI thì yeah, cũng có lúc thấy thiếu, cái này cũng là 1 khía cạnh khá controversial, vì argument là nếu structure ko phức tạp thì khỏi cần DI -> cũng hơi cảm tính.
Codebase thì tôi đã đụng vào mono-repo của Grab dùng Go, còn Java thì là mono-repo của Google, thì cảm thấy Google khó chịu hơn, vì Java có quá nhiều thứ behind the scene, đương nhiên là cảm tính thôi, bản thân 2 cty cũng khác nhau.
làm ở Grab thì có coding convention là ko dùng implicit interface như cách ông dùng trên kia mà nhỉ
cách implicit interface như ông làm 1 thằng khác ko biết add thêm 1 func vào interface đó là nát, điều thường xảy ra với team dev gần 1k người như Grab.
làm ở Grab thì có coding convention là ko dùng implicit interface như cách ông dùng trên kia mà nhỉ
cách implicit interface như ông làm 1 thằng khác ko biết add thêm 1 func vào interface đó là nát, điều thường xảy ra với team dev gần 1k người như Grab.
Sao nát đc, mono-repo mà, sửa 1 phát là biết ngay.
ThuyMy
Đọc bài của anh
@gtunveteran làm tôi nghĩ ngay đến bài này
http://paulgraham.com/ds.html (btw chỉ là tranh luận trên mạng, anh không có thời gian đọc blog muốn do real thing thì tùy anh vậy).
Nhiều anh startup user còn chưa thấy đâu đã cầm đèn đi trước oto đổ tiền vô xây cơ sở hạ tầng, technical đủ thứ để phục vụ "tỉ người dùng". Những thứ này nó không hề free, đổi lại là thời gian deliver sản phẩm, thời gian maintain, tiền bạc, nhân lực... Bọn FAANG tự làm hàng inhouse vì đơn giản là nó có problem riêng và quan trọng là họ có thừa nhân lực để làm. Còn các anh startup học theo thì đếch khác gì solution looking for a problem (trừ phi cái solution đó là sản phẩm chủ lực của cái startup của nah).
Còn các anh startup tiền không có, nhân lực không có mà đòi làm hàng inhouse (để phục vụ tỉ người dùng) tôi nói thẳng là bullshit.
Thực tế thành công của startup nó đếch nằm ở yếu tố technical mà ở yếu tố thị trường. Đem tiền cho mấy anh "engineer" đi làm startup thì 10 anh hết 9 anh lo tìm cách build infrastructure phục vụ tỉ người dùng trong khi user thì chưa thấy đâu.
Thành công của VNG, của M$, của Google là họ tìm được thị trường và giành được nó trong 1 khoảng thời gian nhanh nhất có thể, đếch phải là vì họ build đc infrastructure phục vụ tỉ người dùng trong những ngày đầu
. Việc scale lên chỉ là điều hiển nhiên khi họ tìm thấy thị trường, thấy tiền mà thôi.
Tôi không biết anh có phải là founder của cái startup mà anh đăng không, nếu phải thì tôi khuyên anh nên tập trung tìm khách hàng hơn là đi làm mấy thứ đốt tiền, đốt thời gian này. Còn ngược lại thì tôi nói thẳng anh chỉ là thằng engineer vẽ hươu vẽ vượn để đốt tiền bọn founder mà thôi
Comment của ông chung chung quá. Mind to elaborate? Việc lựa chọn trade off là chuyện bt của swe, làm j có solution hoàn hảo.
Từ đầu thấy bạn cứ đem cái Polymorphic Abstraction của Go đi khoe, nên tôi đang chỉ ra tại sao ko nên khoe đó.
Syntax và Type System ko phải là điểm mạnh của Go, Go mạnh cái khác. Ngta bảo tốt khoe xấu che, còn bạn đem cái xấu ra khoe ấy, cái Interface của Go là tổng hợp của Syntax xấu, Design ko tốt, Error prone mà bạn khoe làm gì.
Từ đầu thấy bạn cứ đem cái Polymorphic Abstraction của Go đi khoe, nên tôi đang chỉ ra tại sao ko nên khoe đó.
Syntax và Type System ko phải là điểm mạnh của Go, Go mạnh cái khác. Ngta bảo tốt khoe xấu che, còn bạn đem cái xấu ra khoe ấy, cái Interface của Go là tổng hợp của Syntax xấu, Design ko tốt, Error prone mà bạn khoe làm gì.
Ông bạn lại nói chung chung rồi, tôi thấy hay và tôi phân tích tại sao, ông chê chung chung như vậy thì nc j nữa?
ờ đúng rồi, ngoài tôi ra thì còn thằng nào viết wall of text nữa mà còn phải thắc mắc :-<
p/s: cơ mà tôi đíu hiểu lắm, cách comment của tôi ở diễn đàn quốc tế bình thường vkl, về việt nam toàn thấy bảo là hăng máu các kiểu.
Cũng ngờ ngợ you là Ser Nya, té ra nick mới chỉ là ít toxic hơn nick cũ -))
Tôi cũng nhiều khi chán cái box này vì kiến thức trong đây toàn như hàng dạt, toàn đại hiệp nói nhiều lan man nhưng nông cạn, đại đa số là junior nên ko muốn đáp.
Tôi cũng nhiều khi chán cái box này vì kiến thức trong đây toàn như hàng dạt, toàn đại hiệp nói nhiều lan man nhưng nông cạn, đại đa số là junior nên ko muốn đáp.
Bạn vào box này thì trình độ của bạn cũng chẳng hơn gì Junior là mấy.
Ông bạn lại nói chung chung rồi, tôi thấy hay và tôi phân tích tại sao, ông chê chung chung như vậy thì nc j nữa?
Tôi chê có dẫn so sánh với implementation của các nn khác đó chứ chung chung gì, bạn chỉ thấy được flexibility của Go interface rồi tưởng hay lắm nhưng có thèm tìm hiểu nếu implicit define như vậy dẫn tới cái gì đâu.
Tôi chê có dẫn so sánh với implementation của các nn khác đó chứ chung chung gì, bạn chỉ thấy được flexibility của Go interface rồi tưởng hay lắm nhưng có thèm tìm hiểu nếu implicit define như vậy dẫn tới cái gì đâu.
finding what types implement a given interface is hard as it relies on function definition matching. I often discover interesting implementations in Java or Scala by searching for classes that implement an interface.
when adding a method to an interface, you will find what types need to be updated only when they are used as values of this interface type. This can go unnoticed for quite some time. Go recommends to have tiny interfaces with very few methods, which is a way to prevent this.
a type may unknowingly implement an interface because it has the corresponding methods. But being accidental, the semantics of the implementation may be different from what is expected from the interface contract.
Pros and Cons thôi, trích lại post tôi ở trên:
ideology của Go là mọi thứ ko cần phải là Object, và interface thì chỉ nên định nghĩa ở lớp trên cùng của package, nơi mà cần phải giao tiếp với những package khác, nói chung nó khiến code đơn giản hơn và ko quá lạm dụng inheritance mà khuyến khích dùng composition.
DI thì yeah, cũng có lúc thấy thiếu, cái này cũng là 1 khía cạnh khá controversial, vì argument là nếu structure ko phức tạp thì khỏi cần DI -> cũng hơi cảm tính.
Như nhiều bài tôi đã viết ở trên, thực ra trong bài cũng nói, Go ko đẹp, mà đơn giản, phù hợp vs microservices, dev ko cần quá chú trọng đến những tính năng fancy mà focus vào getting the shit done. Nói thế để ông bạn hiểu tại sao tôi đánh giá cao tính năng đó, nó phải ở trong context.
The consequences of implicit interfaces are a few things.
Accidental interface implementation, this can be a happy accident, or an accidental LSP violation by meeting someone else's interface which you didn't intend to while not honoring the intent of it's contract.
The ability to easily make any method accept a mock of any given object at all by simply mirroring that objects interface (or even just creating an interface that meets that methods requirements and no more).
The ability to create adapters or other various similar patterns with more ease in regards to objects you can't meddle at the innards of.
Delay interface implementation, and implement it later without having to touch the actual implementation, only implementing it when you actually want to create another implementor.
ideology của Go là mọi thứ ko cần phải là Object, và interface thì chỉ nên định nghĩa ở lớp trên cùng của package, nơi mà cần phải giao tiếp với những package khác, nói chung nó khiến code đơn giản hơn và ko quá lạm dụng inheritance mà khuyến khích dùng composition.
DI thì yeah, cũng có lúc thấy thiếu, cái này cũng là 1 khía cạnh khá controversial, vì argument là nếu structure ko phức tạp thì khỏi cần DI -> cũng hơi cảm tính.
Như nhiều bài tôi đã viết ở trên, thực ra trong bài cũng nói, Go ko đẹp, mà đơn giản, phù hợp vs microservices, dev ko cần quá chú trọng đến những tính năng fancy mà focus vào getting the shit done. Nói thế để ông bạn hiểu tại sao tôi đánh giá cao tính năng đó, nó phải ở trong context.
The consequences of implicit interfaces are a few things.
Accidental interface implementation, this can be a happy accident, or an accidental LSP violation by meeting someone else's interface which you didn't intend to while not honoring the intent of it's contract.
The ability to easily make any method accept a mock of any given object at all by simply mirroring that objects interface (or even just creating an interface that meets that methods requirements and no more).
The ability to create adapters or other various similar patterns with more ease in regards to objects you can't meddle at the innards of.
Delay interface implementation, and implement it later without having to touch the actual implementation, only implementing it when you actually want to create another implementor.
Hình như bạn nhầm lẫn tôi với ai đó hay đọc sót gì ở đây thì phải.
Tôi đã nói về Polymorphic Abstraction và triết lý prefer composition over inheritance ngay từ đầu và dẫn ra một loạt ngôn ngữ khác đều promote cái triết lý đó. Và bọn nn đó cũng đầy đủ đồ chơi để làm được, code còn elegance hơn Go nhiều. Vậy nên nhắc lại là cái interface của Go là cái đi sau, chẳng có gì mới mẻ mà bạn cứ khăng khăng như Go sáng tác ra nó ấy.
Cái khác biệt là Go thì implicit define, tức là bạn ko cần tag hay ghi rõ interface signature vào chỗ implementation thôi, chứ purpose của nó ko khác gì Trait/Typeclass/Interface của bọn kia cả.
Và implicit nó dẫn đến những bug ko báo trước hoặc function ko mong muốn (accidental interface implementation như trên kia nói). Bạn kéo xuống mà đọc về 2 cái bug Nil value và data race kia kìa.
Tôi chẳng nói về Inheritance, DI, hay object gì ở đây cả mà bạn dẫn ra làm gì? Nói để biết thêm, tôi là anti-fan của OOP nên bạn k cần phải lo mấy thứ đó.
Hình như bạn nhầm lẫn tôi với ai đó hay đọc sót gì ở đây thì phải.
Tôi đã nói về Polymorphic Abstraction và triết lý prefer composition over inheritance ngay từ đầu và dẫn ra một loạt ngôn ngữ khác đều promote cái triết lý đó. Và bọn nn đó cũng đầy đủ đồ chơi để làm được, code còn elegance hơn Go nhiều. Vậy nên nhắc lại là cái interface của Go là cái đi sau, chẳng có gì mới mẻ mà bạn cứ khăng khăng như Go sáng tác ra nó ấy.
Cái khác biệt là Go thì implicit define, tức là bạn ko cần tag hay ghi rõ interface signature vào chỗ implementation thôi, chứ purpose của nó ko khác gì Trait/Typeclass/Interface của bọn kia cả.
Và implicit nó dẫn đến những bug ko báo trước hoặc function ko mong muốn (accidental interface implementation như trên kia nói). Bạn kéo xuống mà đọc về 2 cái bug Nil value và data race kia kìa.
Tôi chẳng nói về Inheritance, DI, hay object gì ở đây cả mà bạn dẫn ra làm gì? Nói để biết thêm, tôi là anti-fan của OOP nên bạn k cần phải lo mấy thứ đó.
Implicit interface thì nó UT dễ hơn, vs các package có thể phát triển song song mà ko quá dependent vào nhau, đó là cái hay tôi thấy, còn cái prefer composition over inheritance là cái cơ bản cmnr rồi, tôi có bàn về interface vs OOP đâu mà ông nêu ra như đúng rồi. Java tôi code 12 năm rồi, còn lạ lol j nữa?
Implicit interface thì nó UT dễ hơn, vs các package có thể phát triển song song mà ko quá dependent vào nhau, đó là cái hay tôi thấy, còn cái prefer composition over inheritance là cái cơ bản cmnr rồi, tôi có bàn về interface vs OOP đâu mà ông nêu ra như đúng rồi. Java tôi code 12 năm rồi, còn lạ lol j nữa?
Oke, bỏ qua OOP.
Unit Test dễ chỗ nào, trong khi Rust chỉ cần thêm 1 dòng import cái signature vào, Haskell thậm chí có cả Type Infer còn mạnh hơn. Tôi thấy interface của Go cần Unit Test dày hơn thì có, Error prone thế kia cơ mà, dễ chắc cũng chỉ là ko cần import thôi chứ gì?
Các bạn đa phần quen với việc sử dụng các db có săn như mysql hay mongodb rồi nên ít động tới c++ , bản chất của việc viết lên các db đó 99% các db kể cả RMDB hay noSQL đều được viết bằng c++, việc phát triển tinh năng mới cho db dựa vào các open source có sẵn thì buộc bạn phải can thiệp vào cấp độ low level , tức là phải làm việc với c++, để ý sẽ thấy mỗi một tập đoàn lớn đều sử dụng db riêng do mình phát triển để tự kiếm soát được toàn bộ hiệu năng của hệ thống, google có leveldb
https://github.com/google/leveldb , facebook có rockdbs
https://github.com/facebook/rocksdb, zalo vn có zdb .;., chìa khóa thành công của một tập đoàn làm product lớn là họ có thể kiếm soát hoàn toàn mã nguồn từ layer thấp nhất tới cao nhất hay không ( đó là lí do tại sao mỗi cty luôn cố phát triển một kiến trúc lữu trữ ở level thấp thay vì dùng luôn sản phẩm của bên thứ 3)
Có lẽ thím hơi nhầm về quan điểm các công ty công nghệ lớn như bọn FAANG tự xây dựng các database riêng của họ để kiểm soát được hiệu năng, mã nguồn,... Mình nghĩ lý do đó, nếu có, chỉ là nhỏ. Lý do chính là mỗi database họ xây dựng để giải quyết một bài toán đặc thù riêng, mà các giải pháp hiện có hoặc không phù hợp hoặc không đủ tốt.
Điều nữa là, những bọn như FAANG không dùng một vài database engines mà thậm chí cả trăm cái. Google vẫn dùng rocksdb của fb, fb vẫn dùng leveldb của google, ko nhất thiết phải tự xây dựng, miễn là hợp lý.
Có lẽ thím hơi nhầm về quan điểm các công ty công nghệ lớn như bọn FAANG tự xây dựng các database riêng của họ để kiểm soát được hiệu năng, mã nguồn,... Mình nghĩ lý do đó, nếu có, chỉ là nhỏ. Lý do chính là mỗi database họ xây dựng để giải quyết một bài toán đặc thù riêng, mà các giải pháp hiện có hoặc không phù hợp hoặc không đủ tốt.
Điều nữa là, những bọn như FAANG không dùng một vài database engines mà thậm chí cả trăm cái. Google vẫn dùng rocksdb của fb, fb vẫn dùng leveldb của google, ko nhất thiết phải tự xây dựng, miễn là hợp lý.
Thì mình cũng có ns là chính vì làm chủ mã nguồn từ tận gốc thì cty mới biết được rằng n tốt như thế nào hay hạn chế ở chỗ nào mà khắc phục, đó là một hướng đi chung cho các tập đoàn lớn hiện nay, các cty product của vn nên làm vậy, làm từ gốc, không lệ thuộc vào bên thứ 3 sẽ tốt hơn nhiều.
drnoxxx
Mấy bố VNG có tiếng khổ dâm từ xưa rồi mà, cái gì cũng muốn tự build mà tôi thấy cũng k có gì xuất sắc
Ngày xưa thời 2008 - 2009, tôi mấy lần đi nghe mấy lão Thanh, Thành... chém gió thấy khoe build DBMS, rồi build memory storage, rồi build proxy... các kiểu thấy cũng thường. Tôi thấy lấy hàng opensource về tuning chưa cần custom chạy cũng ngon y chang méo khác gì
))
Đọc bài của anh
@gtunveteran làm tôi nghĩ ngay đến bài này
http://paulgraham.com/ds.html (btw chỉ là tranh luận trên mạng, anh không có thời gian đọc blog muốn do real thing thì tùy anh vậy).
Nhiều anh startup user còn chưa thấy đâu đã cầm đèn đi trước oto đổ tiền vô xây cơ sở hạ tầng, technical đủ thứ để phục vụ "tỉ người dùng". Những thứ này nó không hề free, đổi lại là thời gian deliver sản phẩm, thời gian maintain, tiền bạc, nhân lực... Bọn FAANG tự làm hàng inhouse vì đơn giản là nó có problem riêng và quan trọng là họ có thừa nhân lực để làm. Còn các anh startup học theo thì đếch khác gì solution looking for a problem (trừ phi cái solution đó là sản phẩm chủ lực của cái startup của nah).
Còn các anh startup tiền không có, nhân lực không có mà đòi làm hàng inhouse (để phục vụ tỉ người dùng) tôi nói thẳng là bullshit.
Thực tế thành công của startup nó đếch nằm ở yếu tố technical mà ở yếu tố thị trường. Đem tiền cho mấy anh "engineer" đi làm startup thì 10 anh hết 9 anh lo tìm cách build infrastructure phục vụ tỉ người dùng trong khi user thì chưa thấy đâu.
Thành công của VNG, của M$, của Google là họ tìm được thị trường và giành được nó trong 1 khoảng thời gian nhanh nhất có thể, đếch phải là vì họ build đc infrastructure phục vụ tỉ người dùng trong những ngày đầu
. Việc scale lên chỉ là điều hiển nhiên khi họ tìm thấy thị trường, thấy tiền mà thôi.
Tôi không biết anh có phải là founder của cái startup mà anh đăng không, nếu phải thì tôi khuyên anh nên tập trung tìm khách hàng hơn là đi làm mấy thứ đốt tiền, đốt thời gian này. Còn ngược lại thì tôi nói thẳng anh chỉ là thằng engineer vẽ hươu vẽ vượn để đốt tiền bọn founder mà thôi
Đó là điểm khác biệt của cty chúng tôi, t đã ns nhân lực từ vng, zalo , mang theo core phát triển đầu tiên của hệ thống bên đó, mặc định chúng t đã có cái nền đó rồi chứ ko phải đốt tiền nhé, và cái t muốn ns là các cty product nên hướng tới việc kiếm soát hiệu năng thực sự của sản phẩm, chứ ko phải là bắt buộc bước đầu tiên phải làm, nhưng đó là điều cần làm và phải hướng tới.
Mấy bố VNG có tiếng khổ dâm từ xưa rồi mà, cái gì cũng muốn tự build mà tôi thấy cũng k có gì xuất sắc
Ngày xưa thời 2008 - 2009, tôi mấy lần đi nghe mấy lão Thanh, Thành... chém gió thấy khoe build DBMS, rồi build memory storage, rồi build proxy... các kiểu thấy cũng thường. Tôi thấy lấy hàng opensource về tuning chưa cần custom chạy cũng ngon y chang méo khác gì
))
Thật chất là mấy thứ đó gần như đã mature hết rồi. Hàng có sẵn thì cũng toàn là guru top tier dành cả đời để optimize, các anh bảo nhu cầu của anh "đặc thù" đến nỗi phải tự build riêng thì nói thẳng là nói phét. Hồi đó tôi cũng rãnh rỗi nghiên cứu bên trong proxy, rdbms có gì ... thì cũng sớm nhận ra hàm lượng chất xám trong đó là vô cùng lớn, nếu cty anh đếch chuyên về lĩnh vực đó thì trình anh đếch đủ, nhân lực anh cũng đếch đủ mà tự build riêng, còn thật sự đặc thù thì thuê bọn đó về tư vấn có khi còn kinh tế hơn là xây dựng solution nữa vời đếch đến đâu.
Văn hóa của bọn FAANG là tiền không thiếu, nhân lực không thiếu, nó dư tiền đốt để experiment mọi thứ.
Thị trường VN nói nhỏ thì không nhỏ nhưng so với bọn FAANG thì như cái móng tay, bọn VNG khoe tự build này nọ tôi nói thẳng cũng để thủ dâm tinh thần là chính (và các anh dev VNG đời đầu thì tôi lại càng nghi ngờ khi lưu password dưới dạng plaintext), trình các anh có cao đến mấy thì cũng đếch có cửa so với bọn dành cả đời để optimize sản phẩm của họ cả
Thật chất là mấy thứ đó gần như đã mature hết rồi. Hàng có sẵn thì cũng toàn là guru top tier dành cả đời để optimize, các anh bảo nhu cầu của anh "đặc thù" đến nỗi phải tự build riêng thì nói thẳng là nói phét. Hồi đó tôi cũng rãnh rỗi nghiên cứu bên trong proxy, rdbms có gì ... thì cũng sớm nhận ra hàm lượng chất xám trong đó là vô cùng lớn, nếu cty anh đếch chuyên về lĩnh vực đó thì trình anh đếch đủ, nhân lực anh cũng đếch đủ mà tự build riêng, còn thật sự đặc thù thì thuê bọn đó về tư vấn có khi còn kinh tế hơn là xây dựng solution nữa vời đếch đến đâu.
Văn hóa của bọn FAANG là tiền không thiếu, nhân lực không thiếu, nó dư tiền đốt để experiment mọi thứ.
Thị trường VN nói nhỏ thì không nhỏ nhưng so với bọn FAANG thì như cái móng tay, bọn VNG khoe tự build này nọ tôi nói thẳng cũng để thủ dâm tinh thần là chính, trình các anh có cao đến mấy thì cũng đếch có cửa so với bọn dành cả đời để optimize sản phẩm của họ cả
Nói chung nói là tự build cho vui thôi, dùng cũng tàm tạm chứ chả ngon bằng hàng có sẵn dc. Ngày xưa mấy lúc rảnh tôi cũng hay mổ source bọn opensource ra xem.
Từ mấy cái application như Magento, đến mấy cái memory storage đơn giản như Redis, phức tạp hơn chút như Nginx, hay hàng hạng nặng hardcore như Postgres.
Xem mấy cái này tôi phải thốt lên là thế đéo nào mấy thằng engineer quái vật nó có thể viết ra mấy cái kinh khủng khiếp đến vậy. Từ kiến trúc đến implement quá kinh, quá sophisticated.
Đám FAANG thì không những dư thừa nguồn lực và tiền bạc, mấy thằng engineer top-tier của bọn nó toàn scientist không thì bảo sao chả khủng vãi cả đái. Đẻ paper sòn sòn như gà công nghiệp đẻ trứng.
Cũng ngờ ngợ you là Ser Nya, té ra nick mới chỉ là ít toxic hơn nick cũ -))
không phải là tôi ít toxic hơn mà là các bạn đã quen thuộc internet hơn thôi, quen rồi cho nên không còn thấy toxic nữa, vì bản thân các bạn cũng bắt đầu toxic rồi
Ayemdi
Đồng ý với bác
@ThuyMy , thấy chém tự build mà tưởng VN có siêu nhân, có chăng cóp đoạn này cắt đoạn kia, bỏ đi đoạn không dùng đến cho phù hợp với cách dùng của mình. Chứ tự build chắc các siêu nhân tự build luôn cả OS cho nó tối ưu hóa.
Tém tém lại, với trình độ của mấy ông viết ra Go, trước khi phát hành còn thử nghiệm lấy ý kiến các kiểu, không lẽ không biết những điểm yếu mà đến lập trình viên VN còn nhận ra? Đôi khi là do mình còn hạn chế về nhận thức nên thấy vậy, đủ trình độ lại thấy khác đấy. Họ hy sinh lợi nhỏ để có được cái lợi lớn hơn.
Quan trọng là họ hỗ trợ, thúc đẩy để ngôn ngữ bám trend như thế nào, làm ra sản phẩm nhanh ra sao. Như JavaScript, đầy những điểm có thể chê, từ năm 1995 đến 2009 thì cũng chỉ đc xem là ngôn ngữ script làm màu cho Frontend. Nhưng sau đấy có framework ngon, hỗ trợ nó thoát ra khỏi môi trường trình duyệt, dân tình thấy có lợi ích lớn, thế là bay như diều gặp gió ngay.
Nói chung nói là tự build cho vui thôi, dùng cũng tàm tạm chứ chả ngon bằng hàng có sẵn dc. Ngày xưa mấy lúc rảnh tôi cũng hay mổ source bọn opensource ra xem.
Từ mấy cái application như Magento, đến mấy cái memory storage đơn giản như Redis, phức tạp hơn chút như Nginx, hay hàng hạng nặng hardcore như Postgres.
Xem mấy cái này tôi phải thốt lên là thế đéo nào mấy thằng engineer quái vật nó có thể viết ra mấy cái kinh khủng khiếp đến vậy. Từ kiến trúc đến implement quá kinh, quá sophisticated.
Đám FAANG thì không những dư thừa nguồn lực và tiền bạc, mấy thằng engineer top-tier của bọn nó toàn scientist không thì bảo sao chả khủng vãi cả đái. Đẻ paper sòn sòn như gà công nghiệp đẻ trứng.
Mấy người nghĩ ra những đoạn mã đó đều là Tiến sĩ các trường đại học lớn. Sao so về trình độ được.
Nipin
về tự build thì tôi thấy công ty lớn nào mà chả tự build in house hầu hết? mấy cái leveldb rocksdb có phải ngay từ đầu đã có đâu, không nói đến chuyện rocksdb là build từ leveldb, trước đó thì có tokyo/kyoto cabinet, DBM các kiểu, thiên hạ cũng đi dần lên chứ có cái gì perfect ngay từ đầu đâu? tất nhiên mấy thằng faang toàn hàng khủng cho nên chất lượng sản phẩm cũng cao hơn là đương nhiên, nhưng mà việc tự build thư viện cho nhu cầu cá nhân tôi thấy hoàn toàn bình thường
Thì mình cũng có ns là chính vì làm chủ mã nguồn từ tận gốc thì cty mới biết được rằng n tốt như thế nào hay hạn chế ở chỗ nào mà khắc phục, đó là một hướng đi chung cho các tập đoàn lớn hiện nay, các cty product của vn nên làm vậy, làm từ gốc, không lệ thuộc vào bên thứ 3 sẽ tốt hơn nhiều.
Có lẽ thím không hiểu ý mình nói. Nhưng thôi ko cần tranh luận thêm. Trước đây(rất lâu), tôi cũng từng nghĩ như thím và tự build/hack một số sản phẩm, có triển khai diện rộng nhưng công nghệ phát triển quá nhanh và đã phát hiện ra những gì mình làm thì trên thị trường đã có giải pháp tốt hơn, chỉ là chưa chịu tìm hiểu thôi.
Dù sao tự build cũng là dịp để học hỏi, nhưng mình cho rằng 99,99% là sản phẩm tự build bên thím không thể cạnh tranh nổi với các sản phẩm opensource có sẵn, kể cả là có tuỳ biến cho riêng trường hợp cụ thể nào đi nữa. Tỉnh lại đi nhé
Có lẽ thím không hiểu ý mình nói. Nhưng thôi ko cần tranh luận thêm. Trước đây(rất lâu), tôi cũng từng nghĩ như thím và tự build/hack một số sản phẩm, có triển khai diện rộng nhưng công nghệ phát triển quá nhanh và đã phát hiện ra những gì mình làm thì trên thị trường đã có giải pháp tốt hơn, chỉ là chưa chịu tìm hiểu thôi.
Dù sao tự build cũng là dịp để học hỏi, nhưng mình cho rằng 99,99% là sản phẩm tự build bên thím không thể cạnh tranh nổi với các sản phẩm opensource có sẵn, kể cả là có tuỳ biến cho riêng trường hợp cụ thể nào đi nữa. Tỉnh lại đi nhé
Vấn đề của Opensource là bạn ko kiểm soát đc tính năng cũng như tốc độ thay đổi của nó, nên core function của cty nên là inhouse để có thể kiểm soát tối đa.
Mục đích của Opensource vs của cty cũng khác nhau, trong khi usecase của cty thì chỉ là 1 tập rất nhỏ, rất đặc thù, thì os target nhiều đối tượng hơn. Cty phải tập trung tune cái usecase của mình -> diverse
Ban đầu có thể bắt đầu vs Os, nhưng sau đó phải tự build cũng là chuyện bt.
Chỉ nên dùng tool khi cái use case quá là phổ biến và well defined rồi, như là version control, CI CD, chat app v.v...
Đến scale như Google thì bắt đầu có 1 tỷ usecase lạ lùng và phải làm in house toàn bộ.
Cho em hỏi ngu tí thế cty mà đem code base của VNG sang mà k bị kiện à các thím.
n là opensource bạn ak, core thôi, vấn đề để build và chạy cái opensource đó thì ko phải cứ pull về mà dùng được ngay đâu. Trong trường hợp làm product nhanh gọn người ta sẽ dùng các opensource hoặc 3rd có phí, nhưng để lên level hàng chục tr người dùng cùng lúc thì đã phần đều phải tự control cái đống opensource đó cho phù hợp
Có lẽ thím không hiểu ý mình nói. Nhưng thôi ko cần tranh luận thêm. Trước đây(rất lâu), tôi cũng từng nghĩ như thím và tự build/hack một số sản phẩm, có triển khai diện rộng nhưng công nghệ phát triển quá nhanh và đã phát hiện ra những gì mình làm thì trên thị trường đã có giải pháp tốt hơn, chỉ là chưa chịu tìm hiểu thôi.
Dù sao tự build cũng là dịp để học hỏi, nhưng mình cho rằng 99,99% là sản phẩm tự build bên thím không thể cạnh tranh nổi với các sản phẩm opensource có sẵn, kể cả là có tuỳ biến cho riêng trường hợp cụ thể nào đi nữa. Tỉnh lại đi nhé
Tự build base trên các nền có sẵn của opensource thôi, sau bổ sung thêm các feature phù hợp cũng đâu nhất thiết phải cải thiện cả perfomance của n. 1 usecase cơ bản thế này nhé, rockdb hay leveldb n bản chất là 1 thư viện c++ và thực hiện việc storage trực tiếp lưu trữ tới io, tuy nhiên chúng ko có khả năng scale rộng lên, vì thế mình sẽ thêm 1 tính năng sharding và warp toàn bộ n trong 1 service hoàn toàn bằng c++ , đó cũng là 1 sự phát triển lên rồi. Không ai đi chế tạo lại cái bánh xe tuy nhiên cũng chả có ai ôm nguyên cái bánh xe của hãng khác lắp vảo của mình.
về tự build thì tôi thấy công ty lớn nào mà chả tự build in house hầu hết? mấy cái leveldb rocksdb có phải ngay từ đầu đã có đâu, không nói đến chuyện rocksdb là build từ leveldb, trước đó thì có tokyo/kyoto cabinet, DBM các kiểu, thiên hạ cũng đi dần lên chứ có cái gì perfect ngay từ đầu đâu? tất nhiên mấy thằng faang toàn hàng khủng cho nên chất lượng sản phẩm cũng cao hơn là đương nhiên, nhưng mà việc tự build thư viện cho nhu cầu cá nhân tôi thấy hoàn toàn bình thường
Tôi không anti hàng tự trồng, vì phần lớn các opensource ngon hiện nay đều có nguồn gốc từ hàng tự trồng của các công ty hay pet project của mấy anh top-tier engineer. Nhưng có điều tôi rất dị ứng với cái kiểu hàng tự trồng nhà tao ngon hơn hàng phổ thông của chúng mày. Nhiều bố VNG tôi gặp hay tự hào kiểu khổ dâm quái đản như vậy nên tôi dị ứng.
Điểm làm nên sự khác biệt của opensource với hàng tự trồng giấu như mèo giấu cứt trong nhà rồi nổ tiếng ra ngoài nhưng chả bao giờ thấy source đó là community. Đơn giản là 100.000 cái đầu + 200.000 con mắt soi chắc chắn ngon hơn 100 cái đầu và 200 con mắt.
Nếu anh build một thứ để giải quyết một vấn đề chưa có gặp thì ok anh đúng nhưng nếu anh build một thứ để giải quyết vấn đề đã có solution và đéo ngon hơn dc cái solution đó thì tốt nhất nên dẹp mẹ nó và commit cho cái solution đã có thì hơn. Netflix là một tấm gương, hồi xưa nó đi tiên phong trong việc tự trồng trọt chăn nuôi nhưng 2 năm trở lại đây thì chuyển dần sang commit cho community rồi vì nó biết rằng hàng nó làm ra quá tốn resource mà chưa chắc đã ăn dc hàng community. Google, Oracle... cũng đang đi con đường y chang.
Mấy bố VNG có tiếng khổ dâm từ xưa rồi mà, cái gì cũng muốn tự build mà tôi thấy cũng k có gì xuất sắc
Ngày xưa thời 2008 - 2009, tôi mấy lần đi nghe mấy lão Thanh, Thành... chém gió thấy khoe build DBMS, rồi build memory storage, rồi build proxy... các kiểu thấy cũng thường. Tôi thấy lấy hàng opensource về tuning chưa cần custom chạy cũng ngon y chang méo khác gì
))
Con người thì ai chả thích đc tôn vinh. Cấp 3 làm theo hướng dẫn đâu đó tọc mạch thì sướng tự nhận là Hacker. Cao hơn xíu thì muốn giữ vị trí, thể hiện tài năng trc đàn em thì phải thò tay vào. Nói chứ tui contribute open source rất mệt, đợi tụi nó accept cái request của mình, mình từ trồng cho nhanh. Khi nào nó merge thì mình xài. Sẵn có đường chém gió với đám đệ. Chưa kể hướng đi của tụi nó là tổng quát, mình muốn xài củ thể má khó vl. Ví dụ tui implement cái driver cho UPS thằng tung của. Cái giao thức nó dùng khá láo, nên việc contribute cũng ko dễ. Nên tự build tự xài là vậy đấy.
Tôi không anti hàng tự trồng, vì phần lớn các opensource ngon hiện nay đều có nguồn gốc từ hàng tự trồng của các công ty hay pet project của mấy anh top-tier engineer. Nhưng có điều tôi rất dị ứng với cái kiểu hàng tự trồng nhà tao ngon hơn hàng phổ thông của chúng mày. Nhiều bố VNG tôi gặp hay tự hào kiểu khổ dâm quái đản như vậy nên tôi dị ứng.
Điểm làm nên sự khác biệt của opensource với hàng tự trồng giấu như mèo giấu cứt trong nhà rồi nổ tiếng ra ngoài nhưng chả bao giờ thấy source đó là community. Đơn giản là 100.000 cái đầu + 200.000 con mắt soi chắc chắn ngon hơn 100 cái đầu và 200 con mắt.
Nếu anh build một thứ để giải quyết một vấn đề chưa có gặp thì ok anh đúng nhưng nếu anh build một thứ để giải quyết vấn đề đã có solution và đéo ngon hơn dc cái solution đó thì tốt nhất nên dẹp mẹ nó và commit cho cái solution đã có thì hơn. Netflix là một tấm gương, hồi xưa nó đi tiên phong trong việc tự trồng trọt chăn nuôi nhưng 2 năm trở lại đây thì chuyển dần sang commit cho community rồi vì nó biết rằng hàng nó làm ra quá tốn resource mà chưa chắc đã ăn dc hàng community. Google, Oracle... cũng đang đi con đường y chang.
Ông bạn có link về Netflix ko? Tôi chỉ biết là nó trước tự build data center mà ko kham nổi nên về Aws thôi.
Còn xài Opensource ở cty như Google coi thế chứ ko dễ đâu. Opensource ko có nghĩa là có license để sài. Lêu hêu nó kiện cho bm.
Tự build base trên các nền có sẵn của opensource thôi, sau bổ sung thêm các feature phù hợp cũng đâu nhất thiết phải cải thiện cả perfomance của n. 1 usecase cơ bản thế này nhé, rockdb hay leveldb n bản chất là 1 thư viện c++ và thực hiện việc storage trực tiếp lưu trữ tới io, tuy nhiên chúng ko có khả năng scale rộng lên, vì thế mình sẽ thêm 1 tính năng sharding và warp toàn bộ n trong 1 service hoàn toàn bằng c++ , đó cũng là 1 sự phát triển lên rồi. Không ai đi chế tạo lại cái bánh xe tuy nhiên cũng chả có ai ôm nguyên cái bánh xe của hãng khác lắp vảo của mình.
Thế tóm lại là tự build từ đầu hay lấy opensource về rồi phát triển thêm, nếu là ý 2 thì bình thường thôi, hầu hết ai cũng làm vậy, còn nếu là ý 1 thì đúng khổ dâm nếu quy mô công ty cỡ VNG, tôi đảm bảo những cái như database tôi chạy open source cấu hình đúng thôi cũng nhanh hơn sản phẩm do VNG làm ra từ đầu rồi, đơn giản là do nó là những sản phẩm được viết bởi những con người tốt hơn và được chứng minh bằng real-world use case rồi. Cỡ hàng in-house của mấy công ty lớn tôi còn tin tưởng chứ in-house của VNG thì xin được phép cười khẩy.
Tự build base trên các nền có sẵn của opensource thôi, sau bổ sung thêm các feature phù hợp cũng đâu nhất thiết phải cải thiện cả perfomance của n. 1 usecase cơ bản thế này nhé, rockdb hay leveldb n bản chất là 1 thư viện c++ và thực hiện việc storage trực tiếp lưu trữ tới io, tuy nhiên chúng ko có khả năng scale rộng lên, vì thế mình sẽ thêm 1 tính năng sharding và warp toàn bộ n trong 1 service hoàn toàn bằng c++ , đó cũng là 1 sự phát triển lên rồi. Không ai đi chế tạo lại cái bánh xe tuy nhiên cũng chả có ai ôm nguyên cái bánh xe của hãng khác lắp vảo của mình.
Có lẽ để chốt vấn đề này, quan điểm của tôi là:
1. "Tự build sản phẩm(thay vì dùng opensource) với mục đích kiểm soát mã nguồn từ thấp nhất đến cao nhất, hay kiểm soát tính năng, tốc độ thay đổi" (như ý bài post trang trước của thím và thím
@trungpham90) là thừa hơi, thiếu khôn ngoan và vô duyên.
2. Phát triển sản phẩm trên nền open-source cho corner-case đặc thù chưa được hỗ trợ, việc này khuyến khích, và được làm rất nhiều chứ không ít. Các công ty product ở mức vừa trở lên hầu như đều đã làm. Tuy nhiên cần tìm hiểu kỹ các giải pháp open-source đã có chưa, vì gần như 95% nhu cầu đã được giải quyết.
3. Rocksdb, leveldb, sqilte thực chất là embeddable database engine, nên các sản phẩm dùng nó để build database engine là rất phổ biến. Bên mình cũng nhúng leveldb vào database system riêng tự phát triển in-house và thêm các add-in features cho nhu cầu riêng. Việc này cũng như mục 2 thôi.
Nói thêm: sau khi phát triển database riêng đó, xuất hiện một giải pháp open-source khác(khá có tiếng) out-perform trên một số phương diện nhất định, nên đang tính chuyển qua dùng giải pháp đó luôn.
Last edited:
callmeooo
khuyến khích tự build code từ đầu như VNG.
Sau lớn mạnh lại share opensource.
Ai cũng hăm he sài hàng opensource thì lấy đâu ra opensource khi k tự build lấy. Hehe đòi ăn trứng mà không muốn nuôi gà thì chỉ có ăn vỏ thôi.
callmeooo
Đéo ưa cái tính hống hách dev nhà VNG nhưng tôi khẳng định Zalo là ứng dụng mess phổ biến hàng đầu VN. Voz ít ai chê zalo giật lag thế là ngon rồi mặc kệ hàng tự build hay tha từ tàu về
Có lẽ để chốt vấn đề này, quan điểm của tôi là:
1. "Tự build sản phẩm(thay vì dùng opensource) với mục đích kiểm soát mã nguồn từ thấp nhất đến cao nhất, hay kiểm soát tính năng, tốc độ thay đổi" (như ý bài post trang trước của thím và thím
@trungpham90) là thừa hơi, thiếu khôn ngoan và vô duyên.
2. Phát triển sản phẩm trên nền open-source cho corner-case đặc thù chưa được hỗ trợ, việc này khuyến khích, và được làm rất nhiều chứ không ít. Các công ty product ở mức vừa trở lên hầu như đều đã làm. Tuy nhiên cần tìm hiểu kỹ các giải pháp open-source đã có chưa, vì gần như 95% nhu cầu đã được giải quyết.
3. Rocksdb, leveldb, sqilte thực chất là embeddable database engine, nên các sản phẩm dùng nó để build database engine là rất phổ biến. Bên mình cũng nhúng leveldb vào database system riêng tự phát triển in-house và thêm các add-in features cho nhu cầu riêng. Việc này cũng như mục 2 thôi.
Nói thêm: sau khi phát triển database riêng đó, xuất hiện một giải pháp open-source khác(khá có tiếng) out-perform trên một số phương diện nhất định, nên đang tính chuyển qua dùng giải pháp đó luôn.
Tôi và thím
gtunveteranđều bảo dựa trên open source mà, thôi ông bạn thích chốt cho ha oai thì tuỳ,hờ hờ
vinhomn
VNG với Zalo có mấy cái source bé tí ti trên github đấy.
Ngoại trừ vài cái source được clone hay fork lại của 1 thằng open source project to to nào đó, còn đâu cứ vọc vào thì sẽ thấy ngay chất lượng in house đến đâu
VNG với Zalo có mấy cái source bé tí ti trên github đấy.
Ngoại trừ vài cái source được clone hay fork lại của 1 thằng open source project to to nào đó, còn đâu cứ vọc vào thì sẽ thấy ngay chất lượng in house đến đâu
Quan trọng ô sử dụng n như thế nào, hiện tại bên android n vẫn đáp ứng tốt cho hơn 100tr người dùng, thứ ô nhìn thấy opensource của n tất nhiên ko phải hoà toàn 10/10 những dòng code đó được sử dụng trong production, nhìn chromnium là biết ngay, google chorm có những thứ mà chorminum không có.
Đéo ưa cái tính hống hách dev nhà VNG nhưng tôi khẳng định Zalo là ứng dụng mess phổ biến hàng đầu VN. Voz ít ai chê zalo giật lag thế là ngon rồi mặc kệ hàng tự build hay tha từ tàu về
Toàn bộ backend là người việt hàng việt nhé, FE ko làm nên ko rõ, thực ra làm FE cũng khó khăn j đâu, nhiều bố coi thường trình dev việt nam mình quá, cỡ giao diện như Zalo , ko thiếu những team làm được, quan trọng là perfomance có đáp ứng được như vậy không, performance n liên quan tới backend là chính, và confirm là dùng hàng nhà trồng nhé ( tất nhiên có sử dụng opensource rồi ) . Mấy con bò trên tinhte đã ngu ko biết j lại còn phán dùng hàng Tàu. Cái j là tàu có thể chứ riêng phần mềm, các team việt nam hoàn toàn làm chủ được nhé, ở vn mình chỉ yếu trong việc tự build các lib hay xây dựng một nền tảng riêng, cái mảng đó phương Tây là trùm cmnr
tthixk
Thuyết âm mưu như loàn, nghe là thấy chưa đụng vào 1 cái hệ thống microservices thật sự. Đúng là nó đốt tiền nhưng nó giải quyết đc rất nhiều vấn đề.
quy trình thường là monolith -> multi monolith -> tách từng monolith ra thành microservices. Ko thằng điên nào chọn start bằng microservices cả, mà khi up nó mới cần.
Đéo ưa cái tính hống hách dev nhà VNG nhưng tôi khẳng định Zalo là ứng dụng mess phổ biến hàng đầu VN. Voz ít ai chê zalo giật lag thế là ngon rồi mặc kệ hàng tự build hay tha từ tàu về
Đa nhân cách ra khỏi hang rồi à
mà giờ off topic quá
Thế túm váy Go có sáng ko?
Chứ giờ tôi thấy tuyên dev kha khá rồi. Chư ba cái Nim, crystal, rust gì ấy ko thấy ai tuyển ở VN.
Nên tôi xin phép close thơt là tương lai sáng nhe
Mẹ mấy cái 2pic nhảm của đa nhân cách và những người bạn bait vl bao nhiêu ông cụ dính bẫy.
Giờ phải tạo 1 cái board list đa nhân cách và những người bạn. Ông nào trước khi cmt vào 2 pic phải check đa nhân cách và những người bạn mới nên cmt nhé
Chứ giờ tôi thấy tuyên dev kha khá rồi. Chư ba cái Nim, crystal, rust gì ấy ko thấy ai tuyển ở VN.
Nên tôi xin phép close thơt là tương lai sáng nhe
Mẹ mấy cái 2pic nhảm của đa nhân cách và những người bạn bait vl bao nhiêu ông cụ dính bẫy.
Giờ phải tạo 1 cái board list đa nhân cách và những người bạn. Ông nào trước khi cmt vào 2 pic phải check đa nhân cách và những người bạn mới nên cmt nhé
Go ko sáng thì còn lang nào sáng trong bối cảnh này nữa, mấy thằng cứ phán n chỉ phục vụ cho nhân viên google, hài vcc, n tốt phù hợp thì mới hàng đống dev lao vào phát triển với tối ưu cho n. Hiện tại và tương lại từ stack là c++ -> golang -> js
Fire Of Heart
Hì, lâu ko vào mà thấy mọi ng thảo luận xôm tụ quá.
Để mình nói vụ opensource trước.
Đầu tiên nói về VNG và Zalo. Bản thân VNG và Zalo vẫn dùng hàng open source đầy ra. Hoặc là lấy cục source về rồi chế biến xào nấu thêm mấy cái wrapper này nọ các kiểu. Nên đừng lấy 1 cái zdb của zalo ra rồi bảo họ ko xài opensource là sai. Họ xài rất nhiều nhé.
Rồi nói về việc sử dụng opensource.
Thực ra xài opensource nó cũng có hạn chế, nhưng cũng có nhiều ưu điểm. Với 1 opensource đã được sử dụng rộng rãi, phù hợp nhu cầu, thì tại sao ko xài mà phải viết một cái khác chi cho tốn công? Nguyên nhân nó ở chỗ này: Opensource, nó cũng có nhiều dạng licences. Có cái dùng cho thương mại, có cái không. Opensource đó có ổn định, có đội ngũ phát triển đàng hoàng hay ko? Có ai backup ko?
Nó có những tính năng mà mình cần hay ko? Cứ trả lời hết mấy câu hỏi đó thì tự biết là nên làm gì thôi. Có thể lấy source về chế lại cho đúng yêu cầu của mình, hoặc tự viết lại, hoặc chỉ việc xài thôi.
Các bác ở trên cãi nhau, mỗi ng 1 ý, các bác đều có ý đúng cả. Mình chỉ nói là các bác nhìn rộng ra 1 tí, đừng nên cứng nhắc là opensource tốt/ko tốt! Thực ra cũng nhiều opensource tệ lắm
Tùy nhu cầu, nguồn lực của mỗi team/công ty thôi.
Cái nguồn lực cũng rất quan trọng đó.
Go ko sáng thì còn lang nào sáng trong bối cảnh này nữa, mấy thằng cứ phán n chỉ phục vụ cho nhân viên google, hài vcc, n tốt phù hợp thì mới hàng đống dev lao vào phát triển với tối ưu cho n. Hiện tại và tương lại từ stack là
c++ -> golang -> js
wtf, golang -> js, c++ -> js ???
Are you fucking kidding me?
Ông bạn có link về Netflix ko? Tôi chỉ biết là nó trước tự build data center mà ko kham nổi nên về Aws thôi.
Còn xài Opensource ở cty như Google coi thế chứ ko dễ đâu. Opensource ko có nghĩa là có license để sài. Lêu hêu nó kiện cho bm.
Link thì đầy trên mạng chứ gì, search phát là ra ngay
Năm ngoái tôi đi SF nói chuyện với mấy thằng kỹ sư Netflix chúng nó cũng bảo giờ bớt tự trồng rồi, công ty trả lương cho kỹ sư để commit opensource luôn, tính ra vẫn rẻ hơn tự trồng.
Ý bạn là bài viết này:
https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f ~ 50 engineers tạo app cho 250 mil users, họ quyết định chuyển từ Go sang Rust chỉ vì GC ???
Như mình nói không ngôn ngữ nào hoàn hảo, bác kia hỏi Rust có gì mà Go không làm được mình đưa link dẫn chứng người thật việc thật cho xem, mình chưa hề nói Rust tốt hơn Go
mọi thứ chỉ mang tính thời điểm theo version và theo ngữ cảnh thôi fence. cái topic generic cho go tranh luận trên github còn chưa có điểm dừng(chưa close).
#Anh BeDe Za Den Hose#
làm golang viết web app cực vl, chả có cái ORM nào ngon để xài với postgres. viết API mà toàn phải tự viết tay từ handler tới middleware này nọ. viết sang mấy cái khác thì cũng hầu hết tự code do spirit của community golang không thích framework.
dòm sang rails hay mới đây là phoenix (elixir) thì thấy golang chỉ sẽ mãi bì bõm trong đống microservices là hết vì ko có văn hoá framework/ opensource, quá ít tooling xung quanh như javascript/ rails...
làm golang viết web app cực vl, chả có cái ORM nào ngon để xài với postgres. viết API mà toàn phải tự viết tay từ handler tới middleware này nọ. viết sang mấy cái khác thì cũng hầu hết tự code do spirit của community golang không thích framework.
dòm sang rails hay mới đây là phoenix (elixir) thì thấy golang chỉ sẽ mãi bì bõm trong đống microservices là hết vì ko có văn hoá framework/ opensource, quá ít tooling xung quanh như javascript/ rails...
Mấy cái ORM của GOlang là active record hay data mapper vậy thím
dòm sang rails hay mới đây là phoenix (elixir) thì thấy golang chỉ sẽ mãi bì bõm trong đống microservices là hết vì ko có văn hoá framework/ opensource, quá ít tooling xung quanh như javascript/ rails...
Rails thì magic nhiều quá nên tôi không muốn rờ tới vì khó maintain.
Bro nghĩa sao về Java cùng lũ đàn em Spring Boot, Intellij
. Tương lai nghe bảo còn nhận thêm thằng đệ GraalVM Native Image
Rails thì magic nhiều quá nên tôi không muốn rờ tới vì khó maintain.
Bro nghĩa sao về Java cùng lũ đàn em Spring Boot, Intellij
. Tương lai nghe bảo còn nhận thêm thằng đệ GraalVM Native Image
tôi dân open source nên ác cảm với .net java này nọ nên không bình luận đc hehe
Dr.Xylitol
Mấy thím trên này bao nhiêu tuổi ròi mà kinh nghiệm nhiều vậy. Lại toàn làm cty lớn, product lớn.
Tôi giờ ngày nào cũng tự nhủ, ráng mỗi ngày try-hard golang thêm vài tiếng (bên cạnh việc công ty).
Bao gồm đọc sách, code side project, học thêm về distributed system, database.
Cố gắng 1-2 năm nữa lên pro, hy vọng dc lương 4-5k là ổn, khỏi cần ra nước ngoài nữa.
Chắc phải bỏ bớt thú vui gái gú, chơi game lại T_T
Mình cũng ráng như bác mà bữa đực bữa cái hay bị mất động lực quá
làm golang viết web app cực vl, chả có cái ORM nào ngon để xài với postgres. viết API mà toàn phải tự viết tay từ handler tới middleware này nọ. viết sang mấy cái khác thì cũng hầu hết tự code do spirit của community golang không thích framework.
dòm sang rails hay mới đây là phoenix (elixir) thì thấy golang chỉ sẽ mãi bì bõm trong đống microservices là hết vì ko có văn hoá framework/ opensource, quá ít tooling xung quanh như javascript/ rails...
Bác rành Elixir không cho em hỏi phát, dạo này em đang rảnh nên định bỏ cái service Go(beego) mà em viết, chuyển sang ngôn ngữ khác, em đang phân vân Elixir hoặc Rust, mà chưa tìm hiểu hết các framework của 2 thằng này, thấy bác nói vậy thì Pheonix nó tiện hơn các framework của Go nhiều lắm hả bác
Bác rành Elixir không cho em hỏi phát, dạo này em đang rảnh nên định bỏ cái service Go(beego) mà em viết, chuyển sang ngôn ngữ khác, em đang phân vân Elixir hoặc Rust, mà chưa tìm hiểu hết các framework của 2 thằng này, thấy bác nói vậy thì Pheonix nó tiện hơn các framework của Go nhiều lắm hả bác
đây là project tôi từng làm, clone chợ tốt:
https://github.com/nipinium/bizzer, dev được tầm hơn 2 tháng thì coin mất giá thằng client dây dưa quịt tiền cho nên tôi không làm nữa, cơ mà bây giờ cảm giác vẫn sướng, tuy khách dẩm l` đổi requirement liên tục nhưng vẫn code rất nhẹ nhàng (chỉ phí thời gian).
thực ra thì phoenix tôi không thấy ngon (trừ khi bạn cần realtime thì có cái pubsub với liveview thì khác, cơ mà mấy cái này tôi chưa đú bao giờ), vì nó gần như chỉ là đống macros + functions hỗ trợ cho cái thư viện nền là plug thôi. Nhưng cái ecto là cái data mapper cho elixir (được phát triển bởi core elixir dev) thì dùng rất sướng, có thể nó không tiện như cái activerecord của rails support tới tận răng, nhưng mà nó chia boundary rất tốt (schemas, queries, repos các kiểu), tính năng cơ bản đều có, muốn advanced feature (aka tự viết custom queries) cũng seamless, ngon nhất là mấy vụ validations (mấy thằng khác cái khác không nói, riêng vụ unique/foreign key constraint xử lý logic lằng nhằng cũng đủ khó chịu rồi). Migration dùng cũng đủ tốt, ít nhất thì tốt hơn mấy ngôn ngữ khác tôi biết, kiểu như tôi dùng khá nhiều mấy tính năng chỉ riêng postgresql có như array/jsonb, gist gin index, extensions (citext, int_array_ops...), custom types.... thì thằng ecto đều hỗ trợ cả.
à mà nói phoenix không tốt thế thôi cơ mà tốt nhất là vẫn dùng, mấy thằng khác dùng không đáng, chả hơn dc bao nhiêu mà mấy cái có lúc cần lại không có rất thọt. Mà vụ code phoenix app ra typo/runtime error, dev page trên browser chỉ đúng dòng code lỗi luôn thì dùng phoenix/elixir đúng là best rồi (nghe nói là về sau nó cho phép sửa luôn code trên web page cơ mà tới lúc đó thì tôi cũng không còn dịp dùng).
đây là project tôi từng làm, clone chợ tốt:
https://github.com/nipinium/bizzer, dev được tầm hơn 2 tháng thì coin mất giá thằng client dây dưa quịt tiền cho nên tôi không làm nữa, cơ mà bây giờ cảm giác vẫn sướng, tuy khách dẩm l` đổi requirement liên tục nhưng vẫn code rất nhẹ nhàng (chỉ phí thời gian).
thực ra thì phoenix tôi không thấy ngon (trừ khi bạn cần realtime thì có cái pubsub với liveview thì khác, cơ mà mấy cái này tôi chưa đú bao giờ), vì nó gần như chỉ là đống macros + functions hỗ trợ cho cái thư viện nền là plug thôi. Nhưng cái ecto là cái data mapper cho elixir (được phát triển bởi core elixir dev) thì dùng rất sướng, có thể nó không tiện như cái activerecord của rails support tới tận răng, nhưng mà nó chia boundary rất tốt (schemas, queries, repos các kiểu), tính năng cơ bản đều có, muốn advanced feature (aka tự viết custom queries) cũng seamless, ngon nhất là mấy vụ validations (mấy thằng khác cái khác không nói, riêng vụ unique/foreign key constraint xử lý logic lằng nhằng cũng đủ khó chịu rồi). Migration dùng cũng đủ tốt, ít nhất thì tốt hơn mấy ngôn ngữ khác tôi biết, kiểu như tôi dùng khá nhiều mấy tính năng chỉ riêng postgresql có như array/jsonb, gist gin index, extensions (citext, int_array_ops...), custom types.... thì thằng ecto đều hỗ trợ cả.
à mà nói phoenix không tốt thế thôi cơ mà tốt nhất là vẫn dùng, mấy thằng khác dùng không đáng, chả hơn dc bao nhiêu mà mấy cái có lúc cần lại không có rất thọt. Mà vụ code phoenix app ra typo/runtime error, dev page trên browser chỉ đúng dòng code lỗi luôn thì dùng phoenix/elixir đúng là best rồi (nghe nói là về sau nó cho phép sửa luôn code trên web page cơ mà tới lúc đó thì tôi cũng không còn dịp dùng).
Bác nhiều kinh nghiệm Elixir thế
Như bác nói thì cái Phoenix đủ cho nhu cầu của em rồi, chủ yếu do em đang cần cải thiện hơn về performance hơn nữa, mà rảnh quá nên thôi viết lại service luôn, còn Rust thì bác có làm qua chưa nhỉ
Như bác nói thì cái Phoenix đủ cho nhu cầu của em rồi, chủ yếu do em đang cần cải thiện hơn về performance hơn nữa, mà rảnh quá nên thôi viết lại service luôn, còn Rust thì bác có làm qua chưa nhỉ
Nhiều gì đâu, có làm vài cái thôi, tới giờ cũng chả con nào còn live, nhiều khi technical hay performance nó đíu quan trọng bằng tiền mặt có đủ hay không
làm golang viết web app cực vl, chả có cái ORM nào ngon để xài với postgres. viết API mà toàn phải tự viết tay từ handler tới middleware này nọ. viết sang mấy cái khác thì cũng hầu hết tự code do spirit của community golang không thích framework.
dòm sang rails hay mới đây là phoenix (elixir) thì thấy golang chỉ sẽ mãi bì bõm trong đống microservices là hết vì ko có văn hoá framework/ opensource, quá ít tooling xung quanh như javascript/ rails...
Rust để mà productive được thì tốn thời gian lắm đó b, bực nhất là build time của nó.
Vào những cty top như Google, Facebook thì ko cần quá chuyên sâu về 1 ngôn ngữ hay công nghệ nào, mà nó cần tư duy giải quyết vấn đề tốt vs kiến thức nền tảng vững, vì tech trong cty hầu như là in-house, nên vào sẽ phải học lại hết.
Go ngon đó bác, mình có join một project migrate Java sang Go, cái Java thì viết bằng Servlet cũ, lúc upgrade mấy ông sếp chuyển qua Go luôn, không chịu up lên Spring, mà dùng beego với grpc.
Không biết beego với grpc có ngon không nhưng tôi thấy java thì spring boot + jpa + lombok code quá nhẹ nhàng
quá ghê, mình cũng 30 mà chỉ làng nhàng. Thím học những gì mà vô được google vậy? Mình tham khảo nâng trình lên tí
Không ngó bài blog của hắn à ?
Hắn chăm chỉ luyện thuật toán 8 năm trên leetcode, hackerank
Fire Of Heart
Thanh niên đó nền tảng cũng tốt mà, học ở Sing, làm ở Sing.
Vậy mà còn fail mấy lần mới pass dc.
Mình cũng fail amazon 1 lần, tới round cuối rồi ^^
để nào train pv lại chứ dạo này ko có nhu cầu nhảy việc lắm ^^
Thanh niên đó nền tảng cũng tốt mà, học ở Sing, làm ở Sing.
Vậy mà còn fail mấy lần mới pass dc.
Mình cũng fail amazon 1 lần, tới round cuối rồi ^^
để nào train pv lại chứ dạo này ko có nhu cầu nhảy việc lắm ^^
PV Amazon thì nên tập trung vào Leadership principle (LP), mỗi principle nên có 1 câu chuyện để demonstrate theo Star format (Situation-Task-Action-Result). Amz nó coi trọng behaviour hơn, vì nó nghĩ là tech thì train đc, còn behaviour thì ko. Còn tech thì chỉ cần vững, ko quá thọt là đc.
Vào Google thì hên xui khá nhiều, vì tỷ lệ chọi quá cao, và Google khá bảo thủ trong việc tuyển người.
Sao tôi thấy bọn nhỏ nhỏ học dev bây giờ chúng nó lười đọc sách thế nhỉ
Hồi tôi lôi cuốn c++ của bjarne stroustrup thì đứa em nó kêu là giờ tutorial đầy. Mà để làm nhanh thì được, chứ để hiểu sâu thì vẫn phải đọc sách rồi nghiền ngẫm chứ ta
Đồng ý với thím này, tôi thấy đọc sách nó có hệ thống và sâu hơn. Nhiều lúc đọc không hiểu phải đọc đi đọc lại. Giờ thấy nhiều bạn trẻ lên youtube học.
speed của crystal hay nim ăn đứt go, vì chúng nó backend là LLVM/GCC (nim thì transpile sang c, lúc đó thì dùng clang hay gcc để compile đều được, crystal thì transpile sang llvm opcode), go thì được cái compile nhanh, chứ optimization thì kém hơn (không gõ dùng gcc-go hay go-llvm các kiểu thì có khá hơn không).
Tôi vẫn đặt niềm tin vào Crystal! Nhóm phát triển đã ra mắt version Crystal 0.35 vào thứ 3 tuần trước (09-06-2020). Việc họ khẳng định đây là bản 0.x cuối cùng là tín hiệu tích cực!
Điều quan trọng là họ sớm fix được những vấn đề anh nêu và sớm ra mắt bản Crystal 1.0 trong năm nay!
Tôi vẫn đặt niềm tin vào Crystal! Nhóm phát triển đã ra mắt version Crystal 0.35 vào thứ 3 tuần trước (09-06-2020). Việc họ khẳng định đây là bản 0.x cuối cùng là tín hiệu tích cực!
Điều quan trọng là họ sớm fix được những vấn đề anh nêu và sớm ra mắt bản Crystal 1.0 trong năm nay!
Tôi cũng hi vọng thế, đợi nhiều thứ, đặc biệt là windows support mòn mỏi từ năm 2016 rồi.
Tuy nói có wsl vẫn dùng được, nhưng đấy là đối với dev, với client thì tôi không thể bảo là muốn dùng phải cài cái nọ cái kia được, khi mà mấy đối thủ cạnh tranh đều compile trực tiếp ra portable exe (kể cả là webapp, thì có cái single binary giống như go thì vẫn dễ deploy hơn)
PV Amazon thì nên tập trung vào Leadership principle (LP), mỗi principle nên có 1 câu chuyện để demonstrate theo Star format (Situation-Task-Action-Result). Amz nó coi trọng behaviour hơn, vì nó nghĩ là tech thì train đc, còn behaviour thì ko. Còn tech thì chỉ cần vững, ko quá thọt là đc.
Vào Google thì hên xui khá nhiều, vì tỷ lệ chọi quá cao, và Google khá bảo thủ trong việc tuyển người.
Em không hiểu sao bác vào Google rồi mà còn vào voz làm gì. Nhưng bác có thể giới thiệu em để vào phỏng vấn ở đó được không. Vì em sợ nộp hồ sơ nó không cho phỏng vấn. Em nghĩ thuật toán thì em cũng Master rồi.
Em không hiểu sao bác vào Google rồi mà còn vào voz làm gì. Nhưng bác có thể giới thiệu em để vào phỏng vấn ở đó được không. Vì em sợ nộp hồ sơ nó không cho phỏng vấn. Em nghĩ thuật toán thì em cũng Master rồi.
Chả lẽ vào Google làm thì chuyển sang Reddit, 4chan thay vì Voz à
Nhớ hồi 2014 lúc đó sốt nodejs, thế là bắt đầu tìm hiểu, làm được cái project nho nhỏ, tìm hiểu thêm thì được các chuyên gia khuyến cáo nên dùng golang để làm backend vì dự án phức tạp thì nodejs nó ì ạch. Thế là tìm hiểu go, lúc đó cộng đồng go chưa mạnh, thế là bỏ luôn, quay về cái máng .net quen thuộc
Nhớ hồi 2014 lúc đó sốt nodejs, thế là bắt đầu tìm hiểu, làm được cái project nho nhỏ, tìm hiểu thêm thì được các chuyên gia khuyến cáo nên dùng golang để làm backend vì dự án phức tạp thì nodejs nó ì ạch. Thế là tìm hiểu go, lúc đó cộng đồng go chưa mạnh, thế là bỏ luôn, quay về cái máng .net quen thuộc
Làm việc nên có chính kiến. Chứ cứ nghe lời thiên hạ thì cuối cùng "đẽo cày giữa đường"!
Nhớ hồi 2014 lúc đó sốt nodejs, thế là bắt đầu tìm hiểu, làm được cái project nho nhỏ, tìm hiểu thêm thì được các chuyên gia khuyến cáo nên dùng golang để làm backend vì dự án phức tạp thì nodejs nó ì ạch. Thế là tìm hiểu go, lúc đó cộng đồng go chưa mạnh, thế là bỏ luôn, quay về cái máng .net quen thuộc
Giờ sang cũng ổn mà bác, nhiều cty tuyển, cái package manager dùng go module cũng ngon hơn rồi
Giờ sang cũng ổn mà bác, nhiều cty tuyển, cái package manager dùng go module cũng ngon hơn rồi
Uh ngôn ngữ nào thì không bao giờ là muộn cả, khi mình đi học trong trường thì cũng học thuật giải, kiến trúc, chứ ba cái ngôn ngữ nó thay đổi theo thời gian á mà, tuỳ môi trường, hoàn cảnh mà mình lựa chọn ngôn ngữ hay công nghệ nào thôi
Ưu điểm của Go:
1. Code dễ đọc, dễ hiểu.
2. Go compiler mang lại nhiều thông tin có để giải quyết các vấn đề thay vì những output vô nghĩa.
3. Go code portable
4. Hỗ trợ concurrency, distributed programming.
5. Support Garbage collection. Được thiết kế khá nhanh chứ ko chậm chạp như GC của java.
6. Ko có preprocessor, tăng tốc độ khi compile chương trình.
7. Có thể build web app.
8. Bộ thư viện chuẩn của Go cung cấp nhiều library cho phép làm việc dễ dàng.
9. Sử dụng static linking by default. Ko cần quan tâm tới library, different version v.v...
10. Support Unicode
(cái này mình đọc sách nhiều nên biết thôi :sexy
Tất nhiên ko có ngôn ngữ nào là hoàn hảo, quan trọng là mục tiêu khi người ta xây dựng ngôn ngữ đó là gì.
Ví dụ như Go thì ko có OOP, có thể gọi là ko trực tiếp support OOP thì chính xác hơn.
Về tốc độ thì mình nghĩ Go vẫn ko thể nhanh hơn C dc, đơn giản là Unix viết bằng C.
Nhưng dù sao Go là một ngôn ngữ hiện đại, dễ học, dễ nắm bắt, dễ viết.
Để học syntax 1 ngôn ngữ thì rất dễ, python hay Java thì chắc ngồi vài hôm là xong. Nhưng để thực sự "đào sâu" vào ngôn ngữ đấy, thì mình nghĩ các bác cần nhiều thời gian hơn rất nhiều.
Có thể mất cả năm trời để hiểu rõ dc các cơ chế hoạt động phía dưới của ngôn ngữ, sử dụng một cách thông thạo, code đẹp đẽ tối ưu.
Do tính chất công việc hiện nay nên đa phần nhiều người ko đạt dc tới level đó và cũng ko coi việc đó là quan trọng, với mình đó là 1 điều đáng buồn.
Các bác chỉ có thể code 1 cách tối ưu khi các bác hiểu rõ ngôn ngữ đó hoạt động như thế nào.
Bác này nói chuẩn vkl. Học một ngôn ngữ thì dễ, hiểu rõ nó ntn mới khó.
Giống như mỗi ngôn ngữ có cuốn Cookbook vậy
money1234
golang ngon nhé. startup, project mới dùng khá nhiều.
Nhưng nói cân JAVA trong tương lai thì không có đâu.
Làm web bằng Go thì dùng luôn std à các bác, hay là có framework nào thông dụng thế ợ?
zhukov
cái vụ gom rác này của Go thường thì thích còn cao thì méo thích. Đọc vài bài bên bọn Tây nó chán cái GC này củ Go. Chính nó làm thọt per của Go đi rất nhiều.
cái vụ gom rác này của Go thường thì thích còn cao thì méo thích. Đọc vài bài bên bọn Tây nó chán cái GC này củ Go. Chính nó làm thọt per của Go đi rất nhiều.
Các anh giỏi viết backend bằng C++ hay Rust đi
Trừ khi sản phẩm có được nhiều CCU khủng như Shopee, còn không cứ dùng Go là đủ rồi
pinkp7996
Con go này mình theo dõi lâu rồi trước tham vọng nhiều giờ có vẻ đuối r
★★★
Bên mình tính build hệ thống backend sử dụng framework Flasgger bên Python, ko biết bên Go có cái nào tương tự ko nhỉ, dự tính ban đầu là làm cục monolithic đã (scale hệ thống đã có Kubernetes lo), sau này cần thì chia nhỏ thành micro-service nếu sản phẩm thật sự cần, vì sợ chưa có kinh nghiệm mà lao vào micro-service gây rối rắm về kiến trúc.
quá ghê, mình cũng 30 mà chỉ làng nhàng. Thím học những gì mà vô được google vậy? Mình tham khảo nâng trình lên tí
Giờ mới lội vào đây. Mình cũng bằng tuổi mà khéo còn làng nhàng hơn.
Thời sv cũng vùng vẫy lập trình thi cử nọ kia mà xong bỏ xó
Tiếc là ko lớn lên ở SG, quá nhiều cơ hội và dễ dàng tiếp cận.
Thời mình ra trường thì HN ngập tràn outsource Nhật, lựa chọn khác mà nhiều ng mong muốn là các tập đoàn nhà nước VNPT Viettel, thời đó cực chảnh chó coi ứng viên như cỏ rác, mà giờ đỡ hơn rồi. Hồi đó mông lung về sự nghiệp, vác lên voz hỏi mà cũng ko có ai chỉ lối.
Giờ thì ko đến nỗi quá tệ nhưng cũng ko có gì happy lắm. HN giờ nhiều cty xịn hơn nhưng cơ bản vẫn đéo bằng SG. Mấy thằng bạn học hành bthg, gắn bó viettel với vcb lương 1 năm cũng lên gần tỷ cmnr.
=====
Btw, cũng là dev chính java và có cơ hội trải nghiệm go. Để ko OT thì góp ý vài nhận xet, tuy ko đào sâu go:
OOP Golang ko focus vào, nên điểm xấu mọi ng nói nhiều rồi. Thấy interface của go tiện ở chỗ: không nhất thiết phải implement từ interface như java -> có thể dùng interface để lọc các struct cần thiết mà ko phải sửa các struct đó. Tương tự có thể thoải mái thêm method ở 1 chỗ khác mà ko phải sửa class như java.
go concurrency base preemptive khá là nhanh gọn nhẹ. java có thể dùng akka actor của scala mà cảm thấy ko ngon bằng go channel.
cách quản lý dependencies tệ vcl, tương tự khiến việc dùng grpc bị cũng gặp rắc rôi với versioning
Giờ mới lội vào đây. Mình cũng bằng tuổi mà khéo còn làng nhàng hơn.
Thời sv cũng vùng vẫy lập trình thi cử nọ kia mà xong bỏ xó
Tiếc là ko lớn lên ở SG, quá nhiều cơ hội và dễ dàng tiếp cận.
Thời mình ra trường thì HN ngập tràn outsource Nhật, lựa chọn khác mà nhiều ng mong muốn là các tập đoàn nhà nước VNPT Viettel, thời đó cực chảnh chó coi ứng viên như cỏ rác, mà giờ đỡ hơn rồi. Hồi đó mông lung về sự nghiệp, vác lên voz hỏi mà cũng ko có ai chỉ lối.
Giờ thì ko đến nỗi quá tệ nhưng cũng ko có gì happy lắm. HN giờ nhiều cty xịn hơn nhưng cơ bản vẫn đéo bằng SG. Mấy thằng bạn học hành bthg, gắn bó viettel với vcb lương 1 năm cũng lên gần tỷ cmnr.
=====
Btw, cũng là dev chính java và có cơ hội trải nghiệm go. Để ko OT thì góp ý vài nhận xet, tuy ko đào sâu go:
OOP Golang ko focus vào, nên điểm xấu mọi ng nói nhiều rồi. Thấy interface của go tiện ở chỗ: không nhất thiết phải implement từ interface như java -> có thể dùng interface để lọc các struct cần thiết mà ko phải sửa các struct đó. Tương tự có thể thoải mái thêm method ở 1 chỗ khác mà ko phải sửa class như java.
go concurrency base preemptive khá là nhanh gọn nhẹ. java có thể dùng akka actor của scala mà cảm thấy ko ngon bằng go channel.
cách quản lý dependencies tệ vcl, tương tự khiến việc dùng grpc bị cũng gặp rắc rôi với versioning
.... chưa nhớ ra thêm gì nữa.
1. Lương dev gần 1 tỷ 1 năm thì mạnh lắm rồi bạn ơi, bảo trung bình ra 3k3/tháng thì saigon cũng hiếm. Giờ t mới biết Viettel/Vcb bạo chi vậy đó.
2. THời đại nào rồi còn OOP hả bạn ơi, OOP để chém lý thuyết suông lúc phỏng vấn hay gì à?
1. Lương dev gần 1 tỷ 1 năm thì mạnh lắm rồi bạn ơi, bảo trung bình ra 3k3/tháng thì saigon cũng hiếm. Giờ t mới biết Viettel/Vcb bạo chi vậy đó.
2. THời đại nào rồi còn OOP hả bạn ơi, OOP để chém lý thuyết suông lúc phỏng vấn hay gì à?
1. À ban đầu dev nhưng có chức danh hết rồi, ko phải ai mới vào cũng cao. mấy cty nhà nước tiền nhiều lắm ko tiếc tiền để giữ chân nhân viên. Quy trình thì hơi lởm nên chi phí thay người khác quá lớn và rủi ro. Viettel gò bó, ít người làm lâu dài, tầm 25-26t đã lên lead là bình thường. Chịu gắn bó sẽ có chán nhưng lương tăng đều, rất là update với thị trường.
2. haha nếu OOP chỉ để pv thì sv lên mạng học thuộc 4 tính chất là trả lời ngon rồi. OOP + pattern hình thành nên tư duy tổ chức code abstraction, có học thuộc làu lý thuyết cũng ko phải ai cũng biết dùng hiệu quả. Giờ có nhiều trường phái khac, OOP ko còn là tôn chỉ nhưng mình vẫn phải công nhận ảnh hưởng của nó. Dù ko dùng OOP thì nó vẫn có ý nghĩa nhất định, chứ ko 2-3 ng contribute vào 1 project chỉ vài bữa là nát bấy, hoặc phải review code kèm chặt junior.
Con go này mình theo dõi lâu rồi trước tham vọng nhiều giờ có vẻ đuối r
Chả thấy đuối gì cả, làm product mỳ ăn liền phục vụ loanh quanh nước Việt Nam 120 triệu dân này cứ dùng Go là nhanh lẹ
Trên vietnamworks cũng tuyển người làm Go đầy ra
Last edited:
Effoc
Mới gọc Go đến đoạn interface ngáo luôn các thím ạ
Thím nào có tâm giải thích cho em ưu điểm của implicit implementation của Go so với explicit implementation của C#, Java không ạ?
Thớt dài 15 page nhưng mục đích chính vẫn là các môn đồ của C#, Java chửi bới OOP và Generic của Golang mà
Cảm ơn thím, cái này coi dễ hiểu
Cái nữa em thắc mắc là implicit có ưu điểm gì so vơi explicit truyền thống trong C#, Java?
An_Va_Com
Em ko phải dân CNTT. Nhưng gần đây có tìm hiểu học Java do rảnh.
Xem video của thằng nào trên Zootube ấy. Nó phân tích dựa trên thống kê về mức lương, nhu cầu tuyển dụng, độ phổ biến,...
Chốt là mới học thì nên Java, có kinh nghiệm 2 năm trở lên, muốn phát triển tiếp thì nên học Go.
(Cũng có vài ý kiến là nên học C/C++ trước rồi học Java. Nhưng đc cái E học C/C++ hồi còn đi học rồi nên quất Java luôn).
Tự hỏi Go nó phải thế nào thì mới có vị thế như vậy chứ. Mà em thấy aura VOZ thường đúng...
Hay là ko học Java nữa học Go nhỉ
Cái nữa em thắc mắc là implicit có ưu điểm gì so vơi explicit truyền thống trong C#, Java?
Ưu điểm là flexible hơn
Nhược điểm là IDE support cùi hơi, code navigate khó hơn, không express intent của impl
Nói mịa ra implicit interface là thể loại xăng pha nhớt.
Nếu bạn chưa học qua C#,Java thì nên học trước rồi hẳng học Go, học thằng Go này trước ngu người hết
Ưu điểm là flexible hơn
Nhược điểm là IDE support cùi hơi, code navigate khó hơn, không express intent của impl
Nói mịa ra implicit interface là thể loại xăng pha nhớt.
Nếu bạn chưa học qua C#,Java thì nên học trước rồi hẳng học Go, học thằng Go này trước ngu người hết
Em cảm ơn thím ạ, em có học qua C# rồi nên mới thắc mắc implicit implement có ưu điểm gì hơn
Em cảm ơn thím ạ, em có học qua C# rồi nên mới thắc mắc implicit implement có ưu điểm gì hơn
Do những người sáng tạo ra Go họ thích thế.
Việt Nam bắt đầu đại học thì học C++ xong học tiếp là Java,
học trung tâm thì kỳ 2 bắt đầu Java/C#.
Chứ dân Mỹ từ bé học Scratch nên họ không đội Java/C# lên đầu
Do những người sáng tạo ra Go họ thích thế.
Việt Nam bắt đầu đại học thì học C++ xong học tiếp là Java,
học trung tâm thì kỳ 2 bắt đầu Java/C#.
Chứ dân Mỹ từ bé học Scratch nên họ không đội Java/C# lên đầu
Cảm ơn thím em mới học nên cũng phải lấy mấy thằng đã biết ra so sánh
Cái nữa em muốn hỏi trong Go vẻ có nhiều cách declare variable quá k biết người ra prefer cách gì nhỉ. Vd như tạo array hay slice sơ sơ có vài cách như sau:
Code:
var a [3]int
var a = [3]int{}
a := [3]int{}
var s []int
var s = []int{}
var s = make([]int, 3)
mấy thím cho hỏi cái đoạn <- done màu đỏ nghĩa là sao ? Nếu em vứt đoạn đó đi thì nó sẽ bị lỗi
đọc ở gobyexample thì nó có giải thích rằng
Block until we receive a notification from the worker on the channel. If you removed the <- done line from this program, the program would exit before the worker even started.
đã đọc công dụng của channel operator
ch <- v // Send v to channel ch.
v := <-ch // Receive from ch, and
// assign value to v.
mấy thím cho hỏi cái đoạn <- done màu đỏ nghĩa là sao ? Nếu em vứt đoạn đó đi thì nó sẽ bị lỗi
đọc ở gobyexample thì nó có giải thích rằng
đã đọc công dụng của channel operator
nhưng <-done đứng 1 mình thì mình không hiểu
Main thread sẽ block đến khi nào channel done có output, tức là khi worker trả về true,
Ko có dòng này thì main thread sẽ return mà ko đợi thread worker hoàn thành.
Cái nữa em muốn hỏi trong Go vẻ có nhiều cách declare variable quá k biết người ra prefer cách gì nhỉ. Vd như tạo array hay slice sơ sơ có vài cách như sau:
Code:
var a [3]int
var a = [3]int{}
a := [3]int{}
var s []int
var s = []int{}
var s = make([]int, 3)
Móa, cái này mà cũng phải lăn tăn, thích dùng gì thì dùng thôi
Main thread sẽ block đến khi nào channel done có output, tức là khi worker trả về true,
Ko có dòng này thì main thread sẽ return mà ko đợi thread worker hoàn thành.
Thím giải thích giúp em đoạn này
Code này chạy không lỗi
Code:
package main
import (
"fmt"
"time"
)
func worker(done chan bool, num chan int) {
fmt.Print("working...")
time.Sleep(time.Second)
fmt.Println("done")
done <- true
num <- 3
}
func main() {
done := make(chan bool)
num := make(chan int)
go worker(done, num)
<-done
}
nhưng nếu ta đổi chút sẽ lỗi
Code:
package main
import (
"fmt"
"time"
)
func worker(done chan bool, num chan int) {
fmt.Print("working...")
time.Sleep(time.Second)
fmt.Println("done")
num <- 3
done <- true // change order
}
func main() {
done := make(chan bool)
num := make(chan int)
go worker(done, num)
<-done
}
Thím giải thích giúp em đoạn này
Code này chạy không lỗi
nhưng nếu ta đổi chút sẽ lỗi
vẫn là trường hợp trên mà bác nãy nói thôi:
Code:
Main thread sẽ block đến khi nào channel done có output, tức là khi worker trả về true,
Ko có dòng này thì main thread sẽ return mà ko đợi thread worker hoàn thành.
goroutine worker không bị deactive ở case 1 là do nó vẫn đợi value của chanel done
ở case 2 main thread close nên goroutine worker deactive nhưng vẫn thay đổi giá trị của num nên sinh ra deadlock thôi
Ở ví dụ đầu tiên, main thread sẽ block đến khi nào channel done có output -> Sai, main thread block đến khi nào có nhận đc value đầu tiền từ done channel hoặc done channel bị closed.
Deadlock là vì trong goroutine worker gửi 3 tới channel num mà không có receiver wait for message (num là unbuffered channel nên goroutine worker bị blocked, trong khi trong main thread thì bị blocked vì waiting for data from done channel, vì vậy mới ra deadlock (both threads are waiting for each other)
Code:
working...done
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]: <- receiver bị block
main.main()
/tmp/sandbox835183100/prog.go:24 +0xa5
goroutine 6 [chan send]: -> sender bị block
main.worker(0xc00005e060, 0xc00005e0c0)
/tmp/sandbox835183100/prog.go:13 +0xf8
created by main.main
/tmp/sandbox835183100/prog.go:22 +0x89
Program exited: status 2.
Ở ví dụ đầu tiên, main thread sẽ block đến khi nào channel done có output -> Sai, main thread block đến khi nào có nhận đc value đầu tiền từ done channel hoặc done channel bị closed.
Deadlock là vì trong goroutine worker gửi 3 tới channel num mà không có receiver wait for message (num là unbuffered channel nên goroutine worker bị blocked, trong khi trong main thread thì bị blocked vì waiting for data from done channel, vì vậy mới ra deadlock (both threads are waiting for each other)
Code:
working...done
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]: <- receiver bị block
main.main()
/tmp/sandbox835183100/prog.go:24 +0xa5
goroutine 6 [chan send]: -> sender bị block
main.worker(0xc00005e060, 0xc00005e0c0)
/tmp/sandbox835183100/prog.go:13 +0xf8
created by main.main
/tmp/sandbox835183100/prog.go:22 +0x89
Program exited: status 2.
Em đang hiểu là worker wait main thread nhưng main thread close rồi nên mới dead lock
my bad, sorry bà con
Last edited:
2TbP
.Net dev mới chuyển qua Go 1 năm, đang có kế hoạch học C++ để tiến qua thế giới mới
Go dùng build phía server ngon lắm các thím, nhanh gọn nhẹ đơn giản
rất có tương lại nhé
.Net dev mới chuyển qua Go 1 năm, đang có kế hoạch học C++ để tiến qua thế giới mới
Go dùng build phía server ngon lắm các thím, nhanh gọn nhẹ đơn giản
rất có tương lại nhé
Thế giới của thím là gì mà lại cần tới c++ thế ? Tôi thì đang phát nản vs cái C++ có vài thứ nó thật sự có điểm yếu tởm. Đang rất phàn nàn về vấn đề stack của nó....
Không biết có ngôn ngữ nào mình được phép can dự mạnh hơn vào stack , kiểu như stack frame tùy chỉnh. Set các kiểu , size , move ...xyz !
Thế giới của thím là gì mà lại cần tới c++ thế ? Tôi thì đang phát nản vs cái C++ có vài thứ nó thật sự có điểm yếu tởm. Đang rất phàn nàn về vấn đề stack của nó....
Không biết có ngôn ngữ nào mình được phép can dự mạnh hơn vào stack , kiểu như stack frame tùy chỉnh. Set các kiểu , size , move ...xyz !
Học C++ để làm mấy thứ "low level" như compiler, game engine, os, malware(khó decode
) ... cho biết, chứ chắc chỉ mấy công ty hardcore như Cốc Cốc, Fb, Google... mới cần tuyển dev C++
nếu có cơ hội chuyển qua luôn
Còn làm product enterprise bình thường thì cứ Go mà táng, trend bây giờ là microservice mà các tool dùng trong microservice đa phần viết bằng Go hoặc có xu hướng move qua Go 1 phần
)) từ docker, k8s đến các phần tracing/monitor như jaeger, prometheus, grafana ...
Với lại Go có cộng đồng cũng đông + được rất nhiều lão làng trong giới đánh giá có tương lai -> có tương lai sáng lạn
1 nốt nhạc nhé, với điều kiện là phải nắm vững C++, có điều muốn nắm vững C++ phải tốn đâu đó tầm 2-3 năm
làm việc chuyên nghiệp với C++
. Nên thôi học trực tiếp Rust thì nhanh hơn.
Rust chẳng qua là lấy mấy cái quy tắc/convention của C++ nhét vào type system để compiler nó check dùm thôi
Thế giới của thím là gì mà lại cần tới c++ thế ? Tôi thì đang phát nản vs cái C++ có vài thứ nó thật sự có điểm yếu tởm. Đang rất phàn nàn về vấn đề stack của nó....
Không biết có ngôn ngữ nào mình được phép can dự mạnh hơn vào stack , kiểu như stack frame tùy chỉnh. Set các kiểu , size , move ...xyz !
Muốn vọc vạch low level thì cứ C thuần mà phang thôi bác.
Mà bác tính làm gì với alloca à, cái quỷ alloca này dễ gây lỗi lắm (alloca stack overflow là UB) nên C++/Rust ban luôn.
No Hard Feelings
Ở nước ngoài thôi. Chứ làm công ăn lương ở vn thì cứ java, python , .net là job nhiều nhất
Em ko phải dân CNTT. Nhưng gần đây có tìm hiểu học Java do rảnh.
Xem video của thằng nào trên Zootube ấy. Nó phân tích dựa trên thống kê về mức lương, nhu cầu tuyển dụng, độ phổ biến,...
Chốt là mới học thì nên Java, có kinh nghiệm 2 năm trở lên, muốn phát triển tiếp thì nên học Go.
(Cũng có vài ý kiến là nên học C/C++ trước rồi học Java. Nhưng đc cái E học C/C++ hồi còn đi học rồi nên quất Java luôn).
Tự hỏi Go nó phải thế nào thì mới có vị thế như vậy chứ. Mà em thấy aura VOZ thường đúng...
Hay là ko học Java nữa học Go nhỉ
Go ít job lắm thím tuyển toàn 5+ năm ko à ko như java. CÒn dân ko chuyên thì cứ học reactjs kiếm tiền cho sướng mà nhẹ nhàng
helloTheWorld
:3 chưa thấy go đâu hết, nhưng thích thì cứ dùng
Buonnguqua6
Đẩy thớt cho 1 nick clone 1 post kiếm tương tác đỡ buồn
Công ty mình đang chuyển dịch hết sang Go đây. Đám web chạy PHP/Nodejs cũng đang chuyển nốt. Mấy ông làm nhúng cũng đang học để chuyển đổi. Mấy thứ đặc thù vẫn viết C++. Mình thì làm Front end cũng học Go để làm GUI cho phần cứng.
Công ty mình đang chuyển dịch hết sang Go đây. Đám web chạy PHP/Nodejs cũng đang chuyển nốt. Mấy ông làm nhúng cũng đang học để chuyển đổi. Mấy thứ đặc thù vẫn viết C++. Mình thì làm Front end cũng học Go để làm GUI cho phần cứng.
Công ty mình đang chuyển dịch hết sang Go đây. Đám web chạy PHP/Nodejs cũng đang chuyển nốt. Mấy ông làm nhúng cũng đang học để chuyển đổi. Mấy thứ đặc thù vẫn viết C++. Mình thì làm Front end cũng học Go để làm GUI cho phần cứng.
Số ít thôi chứ ko phải ai cũng sẵn sàng migrate wa. Như bạn kia nói chuẩn, có tg mà đam mê thì học thôi.
Số ít thôi chứ ko phải ai cũng sẵn sàng migrate wa. Như bạn kia nói chuẩn, có tg mà đam mê thì học thôi.
Bạn ấy nói chưa thấy Go đâu hết nên mình trả lời ấy mà. Đúng là giờ vẫn khá ít. Ở miền Trung đăng tuyển cũng không có người. Đầu tàu SG, HN 5, 6 tháng gần đây mới nhiều job
HaLinhNHP
Dự án em làm đang có kế hoạch chuyển từ php sang golang, mọi người có chia sẻ gì cho golang phía front end không ?
Sếp có chỉ thị học go để làm việc với bên backend go, cả team cùng bắt đầu học
frontend với backend giao tiếp với nhau qua API, thì qtam làm gì backend viết bằng ngôn ngữ nào. Đi bắt mấy thằng frontend học golang làm gì , sếp gì xàm vđ
Sếp có chỉ thị học go để làm việc với bên backend go, cả team cùng bắt đầu học
Hỏi lại sếp làm front-end cho cái gì. Như anh làm giao diện cho phần cứng không dùng được webview được mới phải học Go thôi. Còn dùng được web thì viết bình thường call api cho nhanh chứ học Go làm gì
Hỏi lại sếp làm front-end cho cái gì. Như anh làm giao diện cho phần cứng không dùng được webview được mới phải học Go thôi. Còn dùng được web thì viết bình thường call api cho nhanh chứ học Go làm gì
Sếp bạn tào lao thế, webview thì frontend js bt chứ học golang làm cái gì, trừ khi ông ấy thấy lực bên be đang mỏng nên nếu việc nặng quá thì share luôn cho team fe
kaitoubg
Chả hiểu sao chứ mình thấy cú pháp của Go nó cứ khó chịu kiểu gì ấy
Sao tôi thấy bọn nhỏ nhỏ học dev bây giờ chúng nó lười đọc sách thế nhỉ
Hồi tôi lôi cuốn c++ của bjarne stroustrup thì đứa em nó kêu là giờ tutorial đầy. Mà để làm nhanh thì được, chứ để hiểu sâu thì vẫn phải đọc sách rồi nghiền ngẫm chứ ta
Em vẫn đang ngâm clean code, Datastruct đây ạ. Có cổ lỗ sĩ quá không nhỉ
frontend với backend giao tiếp với nhau qua API, thì qtam làm gì backend viết bằng ngôn ngữ nào. Đi bắt mấy thằng frontend học golang làm gì , sếp gì xàm vđ
Học ấm vào thân
Làm được fullstack nhảy việc lương cao hoặc nhận việc làm product cho người khác
Phàn nàn cái lol
1 thằng ở công ty tôi sn 90 lương 25 triệu nhưng tài sản tự thân kiếm được 8 tỷ nhé
Việc gì cũng biết làm hết, frontend js, backend java, C#, nodejs, Android,Swift iOs app, Unity, security + kỹ năng mềm uống rượu say xỉn, karaoke tay vịn bóp vếu đào với đối tác
Không có từng nấy kỹ năng có lol kiếm được 8 tỷ
Học ấm vào thân
Làm được fullstack nhảy việc lương cao hoặc nhận việc làm product cho người khác
Phàn nàn cái lol
1 thằng ở công ty tôi sn 90 lương 25 triệu nhưng tài sản tự thân kiếm được 8 tỷ nhé
Việc gì cũng biết làm hết, frontend js, backend java, C#, nodejs, Android,Swift iOs app, Unity, security
Không có từng nấy kỹ năng có lol kiếm được 8 tỷ
Đéo phóng đại luôn fen
1 lần nó bị thằng đệ ruột dí cho 3 cốc bia liên tục 1 hơi hết luôn. Nó mới khai ra, tôi ang áng nó kiếm được 6 tỷ thôi, ai dè hơn
Chưa tính tiền nhậu nhẹt, massage, vịn, xxx gái, PGA của nó 1 năm cũng phải tiêu nửa tỷ
Đéo phóng đại luôn fen
1 lần nó bị thằng đệ ruột dí cho 3 cốc bia liên tục 1 hơi hết luôn. Nó mới khai ra, tôi ang áng nó kiếm được 6 tỷ thôi, ai dè hơn
Chưa tính tiền nhậu nhẹt, massage, vịn, xxx gái, PGA của nó 1 năm cũng phải tiêu nửa tỷ
thế fen có biết cụ thể nó làm gì ra 8tỷ đó ko @@.
thầu freelance chẳng hạn. chỉ sơ cho ae có đường road to 8 tỉ
Đéo phóng đại luôn fen
1 lần nó bị thằng đệ ruột dí cho 3 cốc bia liên tục 1 hơi hết luôn. Nó mới khai ra, tôi ang áng nó kiếm được 6 tỷ thôi, ai dè hơn
Chưa tính tiền nhậu nhẹt, massage, vịn, xxx gái, PGA của nó 1 năm cũng phải tiêu nửa tỷ
winner thứ thiệt đây rồi
HaLinhNHP
Chô em làm nói môi người làm 1 ngôn ngư mà thật ra toàn full-stack, code cái gì cung được, siêu vl
Học ấm vào thân
Làm được fullstack nhảy việc lương cao hoặc nhận việc làm product cho người khác
Phàn nàn cái lol
1 thằng ở công ty tôi sn 90 lương 25 triệu nhưng tài sản tự thân kiếm được 8 tỷ nhé
Việc gì cũng biết làm hết, frontend js, backend java, C#, nodejs, Android,Swift iOs app, Unity, security + kỹ năng mềm uống rượu say xỉn, karaoke tay vịn bóp vếu đào với đối tác
Không có từng nấy kỹ năng có lol kiếm được 8 tỷ
Cái anh nói đếu liên quan đến cái tôi nói, vậy thôi
Tôi giờ ngày nào cũng tự nhủ, ráng mỗi ngày try-hard golang thêm vài tiếng (bên cạnh việc công ty).
Bao gồm đọc sách, code side project, học thêm về distributed system, database.
Cố gắng 1-2 năm nữa lên pro, hy vọng dc lương 4-5k là ổn, khỏi cần ra nước ngoài nữa.
Chắc phải bỏ bớt thú vui gái gú, chơi game lại T_T
Try hard là làm gì thế bác. Em cũng đang làm go nhưng để tốt hơn mỗi ngày thì vẫn chưa biết cách luôn. Bác có lộ trình em tham khảo với
RPG29
Nay tự nhiên phát hiện ra đoạn này thấy hơi khó hiểu, giờ mới biết có thể bỏ qua receiver variable giữ lại Type
Không thấy trong tài liệu Go official nó nhắc tới nhỉ
type Tabler interface {
TableName() string
}
// TableName overrides the table name used by User to `profiles`
func (User) TableName() string {
return "profiles"
}
type Tabler interface {
TableName() string
}
// TableName overrides the table name used by User to `profiles`
func (User) TableName() string {
return "profiles"
}
Go thì học với làm lâu toàn đọc spec chứ không cần lên stack overflow làm gì.
Thím có project mẫu nào để học theo không nhỉ?
Trước giờ toàn code Java, Kotlin sang Go thấy thọt thọt chưa quen khó chịu quá.
Project mới bắt buộc dùng nên đang xem lại, trước giờ toàn học chơi chơi
Trước giờ toàn code Java, Kotlin sang Go thấy thọt thọt chưa quen khó chịu quá.
Project mới bắt buộc dùng nên đang xem lại, trước giờ toàn học chơi chơi
Thì nó cache lại mà, cache nhiều lên thì cứ xóa hết để nó down lại thôi
Như Maven lâu lâu cache nó đầy quá cũng phải xóa bớt
Thì nó có cái câu lệnh go clean --modcache nhưng nó sẽ xóa hết tất cả các module đã cache, hài vl
BetterNextTime
Về việc xóa hoàn toàn module cache trong máy thì thực ra rất ít khi làm vì
module có thể được share giữa nhiều repo, mất thời gian đi check all repos để đảm báo xóa không cần tải lại
no gain khi remove cache, tương lai nếu cần phải download lại
Bản thân tôi chỉ làm khi:
có 1 cái dependency mà owner overwrite code nhưng giữ version giống thế, cách duy nhất để pull cái mới về là clear cache (tôi nói trên context của go 1.14)
package download bởi go get trong older version, nhưng muốn download lại bằng go mod tidy hoặc go mod vendor.
THE LAST LEAF
Go dùng sướng nhưng go mod thực sự như hạch, khó dùng hơn rất nhiều so với các package manager khác như npm, maven, nuget,...
RPG29
Đá lên phát, bên Java mình hay dùng Feign hoặc Retrofit cho HTTP Client.
2 thằng này nó là declarative client nên rất tiện, khai báo interface rồi call nó tự request, binding... các kiểu trả POJO.
Bên Go có thằng HTTP/REST Client tương tự không nhỉ?
Đá lên phát, bên Java mình hay dùng Feign hoặc Retrofit cho HTTP Client.
2 thằng này nó là declarative client nên rất tiện, khai báo interface rồi call nó tự request, binding... các kiểu trả POJO.
Bên Go có thằng HTTP/REST Client tương tự không nhỉ?
Tốc độ chạy chỉ kém C,C++ 1 tí thì lại chả mọi hệ thống Backend sẽ viết lại hết bằng Go
Chưa chạm vấn đề thôi Go ko phải ko có nhược điểm chí tử đâu. Cơ mà vs nhu cầu ko phải dạng kinh thiên động địa thì quá tốt. Nó đi sau như vậy ổn cân bằng được khá nhiều thứ.
C,C++ nó có vẻ đẹp của sự nguyên thủy. Vẻ đẹp ma mi gai góc chết người....
Cá nhân hơi tiếc cho Rust , nếu là con của gg hay apple hay mi.... Chắc số phận Rust đã khác.
C,C++ nó có vẻ đẹp của sự nguyên thủy. Vẻ đẹp ma mi gai góc chết người....
Cá nhân hơi tiếc cho Rust , nếu là con của gg hay apple hay mi.... Chắc số phận Rust đã khác.
Không thể hy vọng Rust phổ biến được. Nó khác gì C++ version dễ hơn 1 tí
Hãng to như Google, Microsoft mới dám dùng
RPG29
Đá lên phát nữa
Bên Go có cái DI framework nào dùng được không các bác? Wire component thủ công số lượng ít thì ok chứ nhiều lên thấy hơi rối!?
Thấy bên này có vẻ không ai thích dùng DI framework, không rõ có pattern hay best practices nào để quản lý dependency graph k các bác?
Có Uber Dig đó bác, nó là Reflection based chứ không phải code generation như Google Wire
Cá nhân mình thấy mấy cái đụng tới reflection là muốn né ra nên không recommend cái này cho bạn kia
cuongstar9x
không nói đến chuyện ngôn ngữ nào tốt hơn
theo các thím làm trong team ngôn ngữ nào ổn nhất
đang làm java, toàn các lão thế hệ 8x bảo thủ, độc đoán đến phát ngán
đang tính chuyển qua Go thử xem sao
Tại sao mà phải né, thật ra reflection nó có nhiều cái hay của nó nhỉ ? Spring mình thấy nó dùng Reflection rất nhiều.
Mình không bảo không reflection không hay.
Tuy nhiên mình không thấy use cases của mình cần dùng dangerous feature như reflection.
Dùng 1 static typing language thì tại sao phải đi ngược kiểm tra type của variable hoặc structure của object? Ngoài metaprogramming ra mình không thấy cần thiết dùng reflection ở chỗ nào cả.
Và việc mình move từ Ruby qua Go 1 phần là để tránh việc dùng metaprogramming, nên mình né reflection là vì vậy
Chưa chạm vấn đề thôi Go ko phải ko có nhược điểm chí tử đâu. Cơ mà vs nhu cầu ko phải dạng kinh thiên động địa thì quá tốt. Nó đi sau như vậy ổn cân bằng được khá nhiều thứ.
C,C++ nó có vẻ đẹp của sự nguyên thủy. Vẻ đẹp ma mi gai góc chết người....
Cá nhân hơi tiếc cho Rust , nếu là con của gg hay apple hay mi.... Chắc số phận Rust đã khác.
không nói đến chuyện ngôn ngữ nào tốt hơn
theo các thím làm trong team ngôn ngữ nào ổn nhất
đang làm java, toàn các lão thế hệ 8x bảo thủ, độc đoán đến phát ngán
đang tính chuyển qua Go thử xem sao
Cá nhân mình cho rằng ngôn ngữ nào không quan trọng bằng việc team bạn có xây dựng development cycle và culture đủ tốt xoay quanh tech stack hay không.
Dev mà không có guidelines hay practice chung thì dễ dẫn tới mỗi người 1 phách (style) xong code rối tung lên thì ngôn ngữ nào cũng vậy
Cá nhân mình cho rằng ngôn ngữ nào không quan trọng bằng việc team bạn có xây dựng development cycle và culture đủ tốt xoay quanh tech stack hay không.
Dev mà không có guidelines hay practice chung thì dễ dẫn tới mỗi người 1 phách (style) xong code rối tung lên thì ngôn ngữ nào cũng vậy
ít nhất java thì độ tuổi các lão già soft skill kém
còn golang hy vọng lớp trẻ soft skill tốt hơn
mình hy vọng vậy
ít nhất java thì độ tuổi các lão già soft skill kém
còn golang hy vọng lớp trẻ soft skill tốt hơn
mình hy vọng vậy
Vãi nồi, tự hoang tưởng ra à.
Cơ bản giờ tuyển dev Java sẽ dễ hơn Go. Đó là câu chuyện nhân sự.
Các system trước nó đã có bằng Java rất nhiều hiện tại business nó ko cần scale lên thì vẫn chạy ngon. Giờ chú vô cty bảo đập hết viết lại đc gì ?
Trước Lazada bị Alibaba mua các chú code Go cho system đó bọn nó vứt Go vào thùng rác, mang nguyên system bên đó về sài. Còn Ant Pays thì nó có 1 Core System Integration, việc nó Integration với các 3party hoặc các service phát rất ez, 1 tuần bọn nó 3 thằng integration xong 20 30 chục cái. Chú trẻ code đc platform đó như nó rồi hẳn nói.
Vãi nồi, tự hoang tưởng ra à.
Cơ bản giờ tuyển dev Java sẽ dễ hơn Go. Đó là câu chuyện nhân sự.
Các system trước nó đã có bằng Java rất nhiều hiện tại business nó ko cần scale lên thì vẫn chạy ngon. Giờ chú vô cty bảo đập hết viết lại đc gì ?
Trước Lazada bị Alibaba mua các chú code Go cho system đó bọn nó vứt Go vào thùng rác, mang nguyên system bên đó về sài. Còn Ant Pays thì nó có 1 Core System Integration, việc nó Integration với các 3party hoặc các service phát rất ez, 1 tuần bọn nó 3 thằng integration xong 20 30 chục cái. Chú trẻ code đc platform đó như nó rồi hẳn nói.
không làm Lazada và Ant Pays nên không biết cái anh nói là gì
tôi nói đập hết đi viết lại bao giờ ?
À sr, nói ko rõ tôi ko nói anh. Nhưng các chú trẻ trẻ thì hay có tư tưởng đó. Kiểu còn trẻ thì nó máu đam mê.
So với Java, Go lợi thế rất lớn về xử lý yêu cầu tài nguyên ít và performance cao. Tôi ví dụ có 20 file, mỗi file 3tr dòng. Cần đọc từng dòng, xử lý transform đơn giản xong tống vào redis. Perf java / go tương đương nhưng resource : CPU: phải gấp 3 - 5 lần ( tuỳ tối ưu ), Ram thì thôi, k nói vì chênh lệch quá lớn. Tôi chưa thử dùng Actor bên jvm nên khó so sánh với channel bên go, ở đây chỉ dùng buildin sẵn của language.
So với Java, Go lợi thế rất lớn về xử lý yêu cầu tài nguyên ít và performance cao. Tôi ví dụ có 20 file, mỗi file 3tr dòng. Cần đọc từng dòng, xử lý transform đơn giản xong tống vào redis. Perf java / go tương đương nhưng resource : CPU: phải gấp 3 - 5 lần ( tuỳ tối ưu ), Ram thì thôi, k nói vì chênh lệch quá lớn. Tôi chưa thử dùng Actor bên jvm nên khó so sánh với channel bên go, ở đây chỉ dùng buildin sẵn của language.
Go là ngôn ngữ cho nhà nghèo thím à, performance ổn + ăn ít tài nguyên + build time cực nhanh nói chung có rất nhiều ưu điểm.
Nhưng mà đòi đập chết ăn thịt Java được thì thôi không có đâu
So với Java, Go lợi thế rất lớn về xử lý yêu cầu tài nguyên ít và performance cao. Tôi ví dụ có 20 file, mỗi file 3tr dòng. Cần đọc từng dòng, xử lý transform đơn giản xong tống vào redis. Perf java / go tương đương nhưng resource : CPU: phải gấp 3 - 5 lần ( tuỳ tối ưu ), Ram thì thôi, k nói vì chênh lệch quá lớn. Tôi chưa thử dùng Actor bên jvm nên khó so sánh với channel bên go, ở đây chỉ dùng buildin sẵn của language.
Tôi biết go nó tốt và ngon, nhưng để nó hình thành như Java còn thiếu nhiều lắm. Lượng code ae code ra rất nhiều khi ko có generic, thêm cái vụ implicity interface nữa xưa tôi dùng Go từ 2018 2017 rồi cơ bản tôi thấy ko thích cho lắm thích code kiểu Functional hơn thôi. Tôi xưa bao h chê Go. Mà để nó làm Application Enterprise như bọn Java, .NET thì còn xa. Cá nhân toi thấy nó phù hợp với infra hơn.
Tôi biết go nó tốt và ngon, nhưng để nó hình thành như Java còn thiếu nhiều lắm. Lượng code ae code ra rất nhiều khi ko có generic, thêm cái vụ implicity interface nữa xưa tôi dùng Go từ 2018 2017 rồi cơ bản tôi thấy ko thích cho lắm thích code kiểu Functional hơn thôi. Tôi xưa bao h chê Go. Mà để nó làm Application Enterprise như bọn Java, .NET thì còn xa. Cá nhân toi thấy nó phù hợp với infra hơn.
chưa phù hợp Enterprise chỗ nào vậy, thím nói cụ thể hơn được không?
Go là ngôn ngữ cho nhà nghèo thím à, performance ổn + ăn ít tài nguyên + build time cực nhanh nói chung có rất nhiều ưu điểm.
Nhưng mà đòi đập chết ăn thịt Java được thì thôi không có đâu
Chuyện đập chết ăn thịt là nói vui thôi. Tôi nhớ hồi nodejs mới ra cũng kiểu hype như vậy, cũng tranh cãi khắp nơi. Right tool right job, như mấy ông to làm ruby python sinh ra jruby hay cpthon để nâng perf mà.
Golang sẽ thay thế Nodejs ở các startups, cân vs Netcore/Java ở enterprise dc ko? Các thím cho lời khuyên?
Ngôn ngữ không là gì cả, mà quan trọng là hệ sinh thái những công nghệ đi kèm,
JavaScript mà ko có ReactJS Angular JS
Java mà ko có Spring
C# mà ko có EnityFramework Ado.net
thì khó mà phổ biến.
Chẳng ai dùng C++để làm website CRUD cả
====
Bác cứ lên Linkedin hay Itviec xem nhu cầu đang là gì rồi học theo thôi. Theo mình quan sát thi Golang ko phổ biến. Nhiều cty tuyển devJava C# vào rồi cho vừa học vừa làm Golang
Cá nhân mình thì gì cũng đc nhưng tránh Java Spring ra, quá phức tạp.
Còn lúc học đại học thì Python khá ok.
zkidkid
Tương lai golang vẫn sáng, sáng hơn rust nhiều. Còn cân với java cho các hệ thống lớn, enterprise thì khó. Chủ yếu java có nhiều các opensource & hệ sinh thái xung quanh rất mạnh, không dễ chuyển được.
Tôi biết go nó tốt và ngon, nhưng để nó hình thành như Java còn thiếu nhiều lắm. Lượng code ae code ra rất nhiều khi ko có generic, thêm cái vụ implicity interface nữa xưa tôi dùng Go từ 2018 2017 rồi cơ bản tôi thấy ko thích cho lắm thích code kiểu Functional hơn thôi. Tôi xưa bao h chê Go. Mà để nó làm Application Enterprise như bọn Java, .NET thì còn xa. Cá nhân toi thấy nó phù hợp với infra hơn.
Proposal thôi mà bác, giờ lâu quá ko có code nên ko rõ
. Nếu ông thêm càng nhiều thứ thì compiler nó làm càng nhiều thứ thì build time nó éo còn nhanh nữa. Cơ bản là việc người làm nhiều thì máy chạy nhanh, để nó làm nhiều thì cái gì cũng chậm
Vãi nồi, tự hoang tưởng ra à.
Cơ bản giờ tuyển dev Java sẽ dễ hơn Go. Đó là câu chuyện nhân sự.
Các system trước nó đã có bằng Java rất nhiều hiện tại business nó ko cần scale lên thì vẫn chạy ngon. Giờ chú vô cty bảo đập hết viết lại đc gì ?
Trước Lazada bị Alibaba mua các chú code Go cho system đó bọn nó vứt Go vào thùng rác, mang nguyên system bên đó về sài. Còn Ant Pays thì nó có 1
Core System Integration, việc nó Integration với các 3party hoặc các service phát rất ez, 1 tuần bọn nó 3 thằng integration xong 20 30 chục cái. Chú trẻ code đc platform đó như nó rồi hẳn nói.
có tài liệu nào nói về cái này của thằng Ant Pay không thím
RPG29
Bên Go này có cái best practices hay guideline nào để tổ chức project cho tốt không nhỉ các bác?
Đang từ bên Java, C# tổ chức kiểu khác qua bên này cảm giác nó thọt thọt khó cấu trúc project quá
Bên Go này có cái best practices hay guideline nào để tổ chức project cho tốt không nhỉ các bác?
Đang từ bên Java, C# tổ chức kiểu khác qua bên này cảm giác nó thọt thọt khó cấu trúc project quá
Ngoài Back end ra thì Go nó làm được cái gì tử tế không nhỉ các fen
Gửi từ Your Phone bằng vozFApp
Bắt đầu lấn sân sang data, AI
RPG29
Đá lên phát nữa...
Để ý thấy code của các bác code Go thích pass args và return result dùng pointer hơn là value nhỉ? Có lý do gì không các bác? Các lí do như thay đổi args, không copy memory... thì em biết rồi, chỉ là thấy có vẻ mọi người thích pointer hơn là value.