Có thể nói Java ngày nay không còn là ngôn ngữ lập trình xa lạ với các developer, và dường như đã trở thành ngôn ngữ có sức ảnh hưởng tuyển dụng hàng đầu trong lĩnh vực công nghệ thông tin. Java – một ngôn ngữ không phải là mới mẻ nhưng chưa bao giờ ngừng “hot”.
Theo bảng xếp hạng của tổ chức IEEE thì Java là ngôn ngữ lập trình đứng thứ 2 bởi khả năng và sự phổ biến. “Hầu như tất cả các enterprise desktop đều chạy Java và nó hiện có mặt trên 3 tỷ điện thoại di động” . Ở Java còn có một sự đặc biệt khác với các ngôn ngữ còn lại, với câu khẩu hiệu: “viết một lần, chạy mọi nơi”. Chính sự phổ biến và đặc biệt này đã giúp Java trở thành “điểm nóng” cho nhu cầu tuyển dụng của các doanh nghiệp về sau.
Các lập trình viên Java thường rất được ưu ái về lương bổng và đãi ngộ. Một lập trình viên Java tại Mỹ thường có mức lương trung bình 1 năm là $88K đô-la (hơn 1,8 tỷ VNĐ/năm). Ngay cả tại Việt Nam, các Junior hay Fresher Java Developer đều rất hào hứng với những đãi ngộ hấp dẫn, lương bổng cao cũng như cơ hội thăng tiến tốt. Nhiều doanh nghiệp còn sẵn sàng đưa ra mức lương cực cao dành riêng cho Senior lập trình Java, thậm chí còn tặng cả khoản bonus khi mới gia nhập lên đến $4000!
Chính vì lẽ đó mà ngày nay Java đang ngày càng trở nên “đắt giá”. Và nó đã mở ra một cơ hội thật sự tiềm năng cho những ai đang theo đuổi về ngôn ngữ lập trình này.
Trở thành một nhà phát triển phần mềm đồng nghĩa bạn sẽ học suốt đời. Vì xu hướng và công nghệ thay đổi thường xuyên trong lĩnh vực phần mềm, chúng ta nên sẵn sàng để đối mặt với sự thay đổi đột ngột. Công việc này đòi hỏi liên tục vận động bộ não, nơi thư giãn hiếm khi là một sự lựa chọn.
Công việc liên quan phát triển phần mềm và kỹ thuật đang tràn ngập trên thị trường việc làm hiện tại. Nếu chúng ta phân tích xu hướng, chỉ có một vài lĩnh vực sẽ được đánh dấu có tác động mạnh trong khi những cái khác có tác động rất ít hoặc ít quan trọng. Mặc dù nhu cầu của các chuyên gia dữ liệu và phân tích, các chuyên gia Big Data, AI đã tăng lên trong suốt ba năm qua, nhưng chúng vẫn không bằng như cầu về một nhà phát triển full stack hoặc một kỹ sư full stack. Có vài lý do cho việc này.
Trước đây, tất cả chúng ta đều biết những vai trò này tồn tại trong thế giới phần mềm từ một thời kỳ xưa xa và một số những cái mới đây:
System Analyst
Software Developer
Software Engineer
Database Analyst/ Admin
Data Analyst/ Scientist
Big Data Developer
Game developer
Network Security Professional
Operations Engineer
Front-end Developer
Web Developer
Full Stack Developer
Back-end Developer
DevOps Engineer
Trong số những chuyên ngành này, chỉ một số rất hot ngay từ đầu năm 2017. Lý do là gì? Đó là do sự bão hòa của một số công nghệ và phát hiện ra các doanh nghiệp mới dưới hình thức start-up. Sự bùng nổ của các doanh nghiệp mới thành lập và doanh nghiệp nhỏ đã hình thành một loạt các kỹ năng cần thiết để làm điểm chuẩn. Trong đó, full stack web development là một.
Nếu bạn xem xét các vị trí trong ngành công nghệ được yêu cầu trước đây ở các tiểu bang khác nhau của Hoa Kỳ:
Vì sao Full Stack Development nổi bật trong nhóm?
Định nghĩa thông thường của full stack developer là
“Thuật ngữ full-stack nghĩa là các lập trình viên có thể làm việc thuận tay với cả back-end và front-end”
Nói một cách chuyên môn thì nó không phải là một yêu cầu tiêu chuẩn của ngành công nghiệp. Đây là một khía cạnh tiến hóa về kỹ năng. Một lập trình viên full stack luôn luôn cố gắng để tìm hiểu các công nghệ mã nguồn mở để áp dụng chúng trong công việc của mình. Theo tôi, full stack development là một sự kết hợp tối thiểu (ít nhất) của những điều sau đây
Front-end Development + Back-end Development + DevOps + Thiết kế
Ngoài việc xây dựng ứng dụng web dễ dàng, một lập trình viên full stack nên biết làm thế nào để deploy, tối ưu hóa, tự động hóa ứng dụng.
Full Stack Development là Tìm kiếm theo chiều rộng ( Breadth First Search – BFS )
Nếu bạn nghiên cứu lý thuyết đồ thị, có bạn có thể đã gặp đồ thị giải thuật duyệt. Tất cả sinh viên ngành khoa học máy tính đều biết chúng rất rõ.
BFS (Breadth First Search)
DFS (Depth First Search)
Tôi ở đây sẽ so sánh điểm giống nhau giữa full stack development với các chuyên ngành khác trong thế giới công nghệ và các lĩnh vực.
BFS là một giải thuật duyệt mà trong lần lượt lượt truy cập tất cả các điểm giao lân cận đến một điểm giao gốc và sau đó bắt đầu nghiên cứu sâu hơn.
DFS là một giải thuật duyệt mà việc đầu tiên là chạm vào đáy của chiều sâu tối đa của điểm giao child đầu tiên và sau đó trả về phía sau và bắt đầu quá trình từ một child thứ hai.
Cái bạn nên học là gì? DFS hay BFS?
Trả lời cho điều này là tuỳ theo sự lựa chọn bản thân. Dr.D sinh viên thích học Depth First bởi vì họ muốn thu hẹp công việc của mình cho một unit cùng một lúc. Nhưng như mô hình phát triển phần mềm chuyên nghiệp vào năm 2017, bạn không có thời gian để build, test và fix mọi thứ. Tìm người quản lý là một sự lựa chọn bình thường cho các doanh nghiệp nhưng đối với những người mới thành lập, họ không thể tạo ra hàng trăm vị trí cho hàng trăm thứ.
Full stack development là tìm hiểu Breadth First, đầu tiên bạn phải cố gắng biết cách điều hành mọi thứ và sau đó cố gắng nghiên cứu sâu hơn bằng cách làm việc liên tục. Thời đi học, chúng tôi thực hiện BFS này bằng cách học các môn học khác nhau cùng một lúc. Không có gì mới trong kỹ thuật này.
Hình ảnh cho thấy sự đa dạng của các lĩnh vực mà một lập trình viên full stack hoạt động và đạt được kinh nghiệm. Vì họ cần chăm sóc mọi thứ từ đầu đến cuối của một ứng dụng web, lập trình viên thường tự tay làm tại những điểm cao nhất trước tiên và sau đó nghiên cứu sâu hơn. Càng học nhiều hơn, càng trở nên mạnh mẽ và hữu ích hơn cho bạn.
Năm 2017, các công ty cần những người có nhiều kỹ năng. Họ không tìm kiếm ứng cử viên bảo thủ có kinh nghiệm trong một công cụ hoặc công nghệ mà không ai biết. Nắm bắt kiến thức về nguồn mở sẽ giúp các nhà tuyển dụng xếp hàng để tuyển bạn (sau đó sử dụng dịch vụ của bạn).
Bạn có đam mê học hỏi?
Nếu bạn là một lập trình viên những người học nhanh chóng và luôn luôn sốt sắng để thử những điều mới lạ bằng cách nào đó, thì hướng đi này phù hợp nhất với bạn. Full stack development là thực hiện mọi thứ, hiểu chúng và cải thiện chúng.
Công việc này liên tục cho bạn nhiều sự hiểu biết sâu sắc hơn về lập trình. Là một lập trình viên full stack, để giải quyết một vấn đề bạn sẽ biết bắt đầu từ đâu, những gì để sử dụng và làm thế nào để phản ứng với yêu cầu mới.
Đẩy mạnh các giới hạn của một lập trình viên web
Trong tennis, tốc độ di chuyển và sức mạnh từng cú đánh được cải thiện. Sự phát triển đang tăng gấp đôi mỗi thập kỷ, làm cho môn thể thao trở nên thú vị hơn. Tất cả các ngành nghề đang phát triển quá nhanh. Khoa học máy tính và phát triển phần mềm không phải là ngoại lệ. Trong những năm trước, người ta thường thuê một chuyên gia để thực hiện một nhiệm vụ. Nhưng bây giờ, trong thời đại điện toán đám mây, sự phát triển trong học tập và thay đổi là chuyện bình thường.
Giống như trong Pokémon, làm thế nào một Pikachu tiến hóa thành một Raichu, một lập trình viên web bình thường đang phát triển thành một lập trình viên full stack.
Ai là lập trình viên full stack?
Full stack development là một thuật ngữ tương đối “tù”. Các kỹ năng cần có của lập trình viên full stack có thể khác nhau tùy theo yêu cầu. Nhưng theo tôi một lập trình viên có thể trở thành một lập trình viên full stack nếu họ là:
Có khả năng làm việc với CSS & JS tốt (Truy vấn media, Ứng dụng trang đơn và DOM, ES6). Biết các công cụ như Grunt, Gulp & Browserify
Biết các framework web (ít nhất một). Ví dụ: Django hoặc Node JS
Làm việc với SQL và NoSQL trong một khoảng thời gian đáng kể (MySQL, Mongo DB). Có thể thiết kế mô hình relation tốt. Có thể thực hiện các truy vấn tiên tiến và SQL Joins
Biết cách deploy code của mình trên AWS EC2 bằng Apache2 hoặc Nginx như web server. Nên có kiến thức làm việc với Docker và Virtualization.
Có thể thiết kế một ứng dụng web hoàn chỉnh với nhiều thành phần dễ thay đổi. Nên dũng cảm để đề xuất những thay đổi kiến trúc nếu bạn có một lý do chính đáng để làm như vậy.
Chọn các giải pháp đơn giản hiệu quả và cải thiện nó trong suốt thời gian
Có thể tạo chu kỳ tự động với kiến thức về Chef hoặc Ansible. Tự động logging và truy xuất lỗi.
Thích chuyển đổi context từ domain này sang cái khác, một công nghệ khác và nhanh chóng hoàn thành công việc trong thời gian đó.
Có kiến thức từ cơ bản đến trung bình về phát triển ứng dụng di động cùng với JS, tiện ích mở rộng Chrome và ứng dụng web hiện đại.
[HN] Mid/ Senior Fullstack Web Developer 1000 – 4000 USD – YOPAZ tuyển dụng
Tại sao bạn nên hướng tới Full Stack Development?
Khi có rất nhiều lựa chọn nghề nghiệp sẵn có, tại sao chúng ta nên bắt tay của mình vào full stack development. Thứ nhất, nó làm cho bạn học những điều mới mọi lúc. Công nghệ đang thay đổi nhanh chóng nên gắn bó với cùng một công việc không phải là lựa chọn cho sự nghiệp của bạn. Bạn giá trị hơn cho một nhóm và có thể tự đánh giá các quyết định liên quan đến bất kỳ khía cạnh nào.
Thứ hai, vị trí này mang lại cho bạn nhiều tiền hơn. Nếu bạn là một lập trình viên full stack, rất có thể là tiền lương của bạn là ngất ngưỡng. Một nghiên cứu về mức lương từ Indeed.com cho biết rằng một lập trình viên full stack trung bình tại San Francisco, CA kiếm được gần $ 1,30,576 một năm, trong khi một lập trình viên web thông thường là khoảng $ 94,614
Ngay cả ở Ấn Độ, những người có kỹ năng full stack development đang có nhu cầu cao vào năm 2017. Thị trường startup Ấn Độ nhận ra tầm quan trọng của việc full stack development gần đây. Các công ty phần mềm từ các thành phố lớn như Delhi, Mumbai, Chennai, Bengaluru đang đăng tuyển vị trí lập trình viên full stack trong linkedIn.
Điểm tiêu cực đáng để suy ngẫm một cách rõ ràng
Full stack development cũng có thể mang lại một số hạn chế và có thể không phù hợp với mọi loại người. Nó có những nhược điểm sau:
Mọi người có thể gọi bạn là “Biết mọi thứ” nhưng “Không chuyên sâu”. Mặc dù nó là một phần của sự thật, bạn cũng có thể theo kịp với những kiến thức bạn có được. Chia sẻ một kỹ thuật đã biết trong một blog, ghi chép có thể giúp bạn nhớ các thủ thuật của công việc hiện tại của bạn cho giai đoạn sau.
Công việc hiện tại của bạn có thể chưa thể áp dụng kiểu “làm từ A tới Z” này.
Đối với người mới, họ cần phải làm việc và chứng minh trong startups là một lập trình viên full stack. Chỉ một số ít được tự do làm những gì họ thích trong giai đoạn đầu. Vì vậy, công ty của bạn sẽ quyết định những gì bạn sẽ làm khi mới bắt đầu sự nghiệp. Vì vậy, lên một kế hoạch rõ ràng trước khi tốt nghiệp.
Trong 5 năm vừa qua, lĩnh vực phát triển web đạt được những bước phát triển vượt bậc với những frameworks, libraries, tools, ngôn ngữ lập trình và power factors mới. Sau hơn nửa năm 2017, chúng ta có thể thấy sự phát triển vẫn rất rõ ràng dánh dấu một năm quan trọng.
Trong bài viết này chúng tôi sẽ nói về những sự kiện nổi bật của thế giới web developer trong nửa năm đầu 2017.
Yarn — Kẻ đã giết chết NPM?
Yarn được tạo ra với mục đích trở thành package manager tốt nhất cho JavaScript. Là một project được phát triển dưới sự hợp tác của Facebook, Google, Exponent, và Tilde. Với Yarn, ta vẫn có thể truy cập vào npm registry. Hơn nữa, Yarn cài đặt khá dễ dàng cũng như nó giúp việc quản lí dependencies giữa các máy và trong một môi trường offline khép kín, an toàn. Yarn còn cho phép việc chia sẻ code tiện lợi hơn. Nhiều chuyên gia tin rằng Yarn sẽ được tích hợp vào NPM để Users hai bên đều được hưởng lợi.
Angular 1, 2, 4
Angular là một framework được sử dụng rộng rãi trong JavaScript. Google vừa mới tung ra Angular phiên bản 2 vào tháng 9, 2016, như là một bản cải thiện của Angular 1. Google dùng phương pháp semantic versioning cho Angular. Và chỉ sau 6 tháng, phiên bản 4 của framework đã được tung ra.
Trong khi đó phiên bản 3 bị bỏ qua do gặp trục trặc kĩ thuật. Do vậy Angular 1 được gọi là AngularJr trong khi phiên bản 2 sẽ được gọi là Angular luôn. Cộng đồng IT đã rất yêu thích framework này và tin rằng nó sẽ càng trở nên nổi tiếng hơn trong tương lai.
React Fiber hiện đang được sử dụng cho các core thuật toán React. Là thành quả từ quá trình nghiên cứu hơn 2 năm của React team. Một trong những điều lo ngại với React là scheduling. Scheduling ám chỉ tính năng cho phép pause, resume và cancel quá trình update nhằm ưu tiên cho các task khác quan trọng hơn – còn được gọi là Incremental Rendering.
Đặc biệt là task liên quan tới Animation. Đây là một tính năng rất quan trọng bởi mắt người sẽ cho rằng ứng dụng bị “lag” nếu thời gian xử lí quá lâu. React 16.0 sẽ được tung ra vào cuối năm 2017, và khác so với Angular, các ứng dụng sử dụng bản React cũ vẫn hoạt động được bình thường.
Đối với front end frameworks, React và Angular là 2 lựa chọn nổi bật nhất. Trong khi đó, Vue.js là một JavaScript framework trẻ hơn nhưng đầy hứa hẹn bởi nó tập trung vào user interfaces.
Ngoài ra, Vue.js còn tích hợp nhiều tính năng hữu ích cho view layer. Với tiềm năng mạnh mẽ cùng sự nổi tiếng, được cộng đồng deverloper quan tâm, Vue.js đã chứng tỏ mình không chỉ đơn thuần là một framework bình thường mà còn có khả năng cạnh tranh với 2 ông lớn React và Angular. Tin rằng buổi công bố về Vue.js trong tháng 6 này sẽ là một sự kiện quan trọng không thể bỏ qua.
Webpack là một JavaScript module bundler tool. Với chức năng chính là bundle JavaScript file để dùng trong trình duyệt web. Nhưng nó cũng có khả năng transforming, bundling, hoặc packaging bất cứ resource và asset nào. Không những thế, Webpack Plugin system còn cực kì mạnh mẽ và rất dễ tinh chỉnh.
Để sử dụng một plugin, bạn chỉ cần thêm require() và bỏ vào trong plugins array. Webpack có mục đích chính là nhầm thể hiện được dependency graph. Nhờ đó mà nó có tiềm năng rất lớn. Webpack 2 &Webpack-cli hiện đã available và được dùng bởi nhiều ứng dụng như Angular-cli.
Những tính năng của ES6
ES6 hoặc ES2015 là phiên bản mới nhất của ECMAScript, từng gây làn sóng bàn luận sôi nổi do phiên bản update trước đó đã ra mất từ tận 2009. Mục đích của ES6 là nhằm hỗ trợ cho các ứng dụng lớn, library và cho việc sử dụng EcmaScript nhằm compile cho các ngôn ngữ lập trình khác.
ES6 mang tới vô số tính năng và cải tiến như promises, lexical block scoping, iterators, generators, modules, class declarations và cả destructuring patterns. Hiện nay, những tính năng này đang được tích hợp vào các JavaScript engine
Prepack —Một Optimizer mạnh mẽ
Prepack là một tool cho phép ta chỉnh sửa và tối ưu hóa mã nguồn của JavaScript. Giúp cho việc xử lí diễn ra nhanh hơn. Có thể xem Prepack là một phần mềm đánh giá chất lượng cho JavaScript. Prepack sẽ rewrite lại JavaScript bundle nhằm tăng hiệu quả cho JavaScript code.
Prepack hiện tại vẫn còn đang trong giai đoạn phát triển nhưng với tiềm năng mạnh mẽ, nó được kì vọng sẽ mang đến thay đổi lớn cho JavaScript. Ứng dụng được tài trợ bởi người khổng lồ – Facebook. Hãng muốn tích hợp Prepack vào React và sẽ biến nó thành một platform trong tương lai.
Firebase dành cho các ứng dụng không có server
Các ứng dụng không có server sẽ phải phụ thuộc vào dịch vụ của bên thứ 3 (3rd party service). Trong khi đó Firebase là một platform dành cho việc phát triển app trên mobile hoặc web. Do được tạo ra dựa trên cấu trúc của chính Google nên nó sẽ tự động tính toán nên bạn không cần lo lắng đối với vấn đề liên quan đến yêu cầu từ người dùng.
Firebase sẽ cho phép bạn code một cách thoải mái mà không cần phải lo đến vấn đề cấu trúc và backend. Cloud Functions, Realtime Database, Crash Reporting, Authentication, Cloud Storage, Hosting, Firebase Notifications và Android Test Lab là một vài tính năng vô cùng hữu ích sẽ giúp cho cuộc sống của bạn dễ dàng hơn.
Tuy vậy, bạn cũng cần để ý đến một số khó khăn khi sử dụng Firebase như thiếu lựa chọn cho việc local development, hạn chế trong JavaScript SDK cũng như sự liên quan tới NoSQL DBs. Tuy vậy, integration với Firebase sẽ dễ dàng hơn với sự giúp đỡ của libraries nhưangularfire2,reactfirevàvuefire
Redux – Luồng Data không theo chiều hướng
Khi trang web của bạn trở nên đồ sộ với lượng content dồi dào thì các trang static html bắt đầu thể hiện sự yếu kém của mình bởi việc chỉ lưu dữ liệu trong một object là không đủ. Redux là một predictable state container dành riêng cho các ứng dụng của JavaScript. Cấu trúc của Redux quay quanh khái niệm luồng Data không theo chiều hướng. Dựa trên cách thức hoạt động từ Facebook’s Flux và ngôn ngữ lập trình function Elm. Được đánh giá là một trong những libraries nổi bật nhất, Redux là lựa chọn tuyệt vời cho front-end development. Với sự đơn giản, thân thiện với người dùng, lại có thể dùng cả trên React và bất cứ JavaScript framework nào.
Microservices – Tối ưu hóa với sự tự do trong tinh chỉnh
Microservices là một kiểu kiến trúc để tạo ra các ứng dụng với cấu trúc của tập hợp loosely coupled services. Mỗi dịch vụ trên có thể tập trung vào một sub-domain của ứng dụng. Nhờ đó mà Microservices cho việc liên tục xử lý các ứng dụng lớn và phức tạp. Ngoài ra, người dùng còn có khả năng cải tiến technology stack bởi từng service là một autonomy và có API riêng của nó. Microservices còn giúp việc xác định và cách ly lỗi, loại trừ long-term commitment của một technology stack cũng như developer hiểu cách hoạt động của ứng dụng nhanh hơn. Đây là một ý tưởng với tiềm năng rất lớn, được các công như eBay, Amazon và Netflix áp dụng.
Lời kết
Sự phát triển của công nghệ và lập trình web là điều không thể tránh khỏi, vì thế mà ta phải luôn luôn học hỏi và bắt kịp với xu thế của thời đại. Năm 2017 đánh dấu sự thăng tiến vượt bậc mà các developer phải luôn chú ý.
Sự kiện WWDC 2017 của Apple vừa mới kết thúc với các key executive như Craig Federighi, Phil Schiller và Tim Cook cùng tham gia diễn thuyết, công bố các update quan trọng được hãng dự kiến sẽ cập bến cho iPhones, MacBooks, Apple TV và những thiết bị khác trong tương lai.
Các tín đồ về công nghệ đặc biệt rất mong chờ WWDC bởi tin đồn về sự xuất hiện của thiết bị cũng như phần mềm ứng dụng mới dành riêng cho developer nhằm chuẩn bị cho phiển bản cập nhật lớn dành cho người dùng vào mùa thu này. Ngoài ra, mọi người cũng dự đoán về việc hãng đưa ra một phiên bản cải thiện Siri – Apple HomePod nhằm cạnh tranh trực tiếp với Amazon Alexa và Google Assistant trong lĩnh vực hardware và smart home front.
Sau đây là 8 highlight từ sự kiện công nghệ WWDC 2017 của ông lớn Apple
Apple công bố HomePod nhằm tranh đấu với Amazon và Sonos
Đầu tiên là tin đồn về một phiên bản Siri speaker, hóa ra, Apple lại không hề có ý định cạnh tranh chỉ với Amazon Echo và Google Home mà còn nhắm tới Sonos home entertainment speakers. Với sản phẩm HomePod, Apple cho biết nó sử dụng công nghệ “nhận biết không gian” (spacial awareness) để đưa ra âm thanh sống động và trung thực dựa vào không gian xung quanh. HomePod còn tích hợp tính năng “Musicologist”, hoạt động được với Apple Music, cho phép bạn stream music. Thậm chí là nó còn có khả năng trả lời được những câu hỏi phức tạp hơn như “Người hát bài này là ai?” hoặc “Album này xuất bản từ năm nào?”
The HomePod sẽ cho người mua được lựa chọn giữa 2 màu là đen hoặc trắng – và có tích hợp Siri trong một case có hình dạng tựa như Amazon Echo / Google Home. Bạn có thể yêu cầu HomePod quản lí các thiết bị thông minh trong nhà cũng như kiểm tra thời tiết và đọc báo. Apple cho biết giá của sản phẩm sẽ là $349, và dịch vụ shipping sẽ được ưu tiên trước cho người mua tại US, UK, và Australia trong tháng 12 này. Hãng dự kiến sẽ tung ra thị trường các khu vực khác vào năm sau.
iMac Pro lộ diện với sức mạnh mới
Apple thông báo iMac Pro sẽ được nâng cấp với phiên bản Retina discụng play tốt hơn, khả năng xử lý graphics được cải thiện, Kaby Lake processors, và tích hợp cả USB-C. Ngoài ra, hãng cũng cho biết sẽ hỗ trợ cho những nội dung về VR. Trong buổi thuyết trình, Apple khoe sức mạnh của iMac Pro và các ứng dụng về VR thông qua một mini game về Darth Vader, với một thanh lightsaber và TIE fighter.
Ngoài ra phần cứng của iMac Pro phiên bản mới cũng sẽ được cải thiện với màn hình chuẩn 5K với khả năng làm mát, chip 8-core Xeon processor (nâng cấp được lên thành 18-core), hơn 4TB SSD, 128GB ECC memory, 4 Thunderbolt 3 port và 10GB Ethernet.
Phiên bản iMac mới này sẽ được niêm yết giá $1,099 với phiên bản 21.5-inch và $1,299 dành cho phiên bản 4K. Ngoài ra, Macbook cũng được nâng cấp và có giá $1,299 với MacBook Pro (bao gồm chip mới Kaby Lake processor). Hãng cho biết iMac Pro sẽ được bán ra với giá $4,999.
IOS 11- Hệ điều hành đầy quyền năng
Trong bản update lần này dành cho iOS, có khá nhiều cập nhật dành cho mảng interact và social với người dùng. Bao gồm, update cho Siri để cải thiện câu nói, khả năng phiên dịch ra nhiều ngôn ngữ và cũng như khả năng đưa ra lời khuyên dựa trên hành động của người dùng trên iPhone và iPad. Ngoài ra, hãng cũng cho biết iMessages giờ cũng sẽ được kết nối với iCloud, với khả năng trò chuyện đồng bộ (synchronized conversation) cho phép bạn xóa nội dung từ bất cứ thiết bị nào miễn là có cùng account. Giờ đây người dùng cũng có thể chi trả và nhận payment từ iMessage.
Khả năng Photo capture cũng được cải thiện, với low-light performance tốt hơn, kèm theo là tính năng edit Live Photo cho phép bạn chỉnh sửa ảnh ngay khi đang quay. Hơn nữa, với phiên bản control center mới cho phép khả năng sử dụng 3D Touch với nửa dưới màn hình một cách trơn tru.
Mặc khác, tính năng an toàn cũng được Apple chú trọng như nhận biết khi người dùng đang tập trung chạy xe và tự động chuyển chế độ tránh làm phiền. iOS 11 cũng cho phép người dùng truy cập Apple Music để xem bạn bè đang nghe nhạc gì cũng như vào shared playlist.
Giao diện của App Store cũng được thay đổi nhằm giúp discovery dễ dàng hơn cũng như thêm How To section để hướng dẫn người dùng cách sử dụng các app nổi tiếng. Ngoài ra, tính năng “App of the Day” cũng đã trở lại nhằm giúp tăng lượng người dùng cho App Store.
IOS 11 cho phép multi tasking với nhiều màn hình hiển thị cùng lúc
Trên iPad, iOS 11 tiếp tục cải thiện trải nghiệm multi tasking khi cho phép người dùng kéo một app từ dock lên screen nhằm chia màn hình hiển thị thành nhiều phần. Tương tự như MacBook, bạn có thể dùng touch để kéo và giữ folders, files, hoặc photos để bỏ chúng vào một app khác như Mail hoặc iMessage. Chữ viết tay từ Apple Pencil cũng có thể tìm thấy trong Notes app. Apple cho biết nó dùng “deep learning” để phân tích và xác định nét chữ.
Apple cũng nói sơ lược qua việc một số Files app bị leak vài giờ trước đó trước khi sự kiện bắt đầu, vốn chỉ là của một system quản lí cho việc sort files dựa trên size và date, tương tự như trên desktop và laptop.
ARKIT cho phép developer viết ra nhiều App ấn tượng hơn
Như Lauren Goode dự đoán, Apple vừa trình làng một phiên bản ARKit mới cho phép developer tạo ra augmented reality app dành cho iphone. ARKIT giúp tìm kiếm planes, track motion, và dự đoán scale và ambient lighting. Các ứng dụng như Pokémon Go sẽ dùng ARKit để cải thiện real-time renders.
Thay vì yêu cầu external hardware như Microsoft’s HoloLens, Apple ARKit lại cho ra chất lượng ảnh khá ấn tượng thông qua thiết bị mà người dùng đã có là iPhone. Tuy nhiên, để đưa ra nhận xét chính xác hơn, chúng ta cần phải đợi đến khi nó được Apple tung ra thị trường.
Ra mắt Ipad pro 10.5-inch
Trong tương lai, chiếc iPad Pro sẽ được sản xuất ở 3 kích thước khác nhau. Ngoài việc sở hữu camera 12-megapixel tương tự như iPhone 7, cùng với camera selfie 7-megapixel, chiếc iPad Pro lần này còn hỗ trợ USB 3.0 và có thời lượng pin lên đến 10 giờ.
Cùng với đó, độ trễ của Apple Pencil sẽ giảm xuống chỉ còn 20 mili-giây với tính năng mới có tên gọi ProMotion. Ngoài ra, nó còn có khả năng tự điều chỉnh refresh rate dựa trên định dạng bạn đang theo dõi (video chuyển động nhanh hoặc hình ảnh tĩnh). Tính năng ProMotion cũng sẽ tăng gấp đôi refresh rate hiện tại, khiến nó tăng lên đến 120Hz
Phiên bản 64GB của chiếc iPad Pro 10.5-inch sẽ được ra mắt với giá $649 (khoảng 15 triệu đồng). Nếu đặt hàng vào lúc này, khách hàng sẽ nhận được sản phẩm sau khoảng 1 tuần.
Hệ điều hành MACOS mới sẽ được đặt tên là High Sierra
Phiên bản tiếp theo của hệ điều hành macOS sẽ được đặt tên là High Sierra. Apple cho biết khi tung ra hệ điều hành này, Safari sẽ có khả năng chặn site tracker và autoplay video. Bên cạnh đó, Apple cũng thêm một số tính năng điều chỉnh hình ảnh như curves để hỗ trợ những người dùng không đủ khả năng chi trả cho Adobe Photoshop. Ngoài ra, Apple cũng sẽ cho ra mắt những công cụ lọc tốt hơn để sort hình ảnh theo keyword hoặc gương mặt.
Cũng theo Apple, phiên bản macOS mới sẽ đi kèm với hệ thống quản lý tập tin mới với tốc độ ghi được tối ưu hơn. Một phiên bản Metal mới cũng sẽ được ra mắt để hỗ trợ công nghệ thực tế ảo, cùng với đó là một bộ Metal 2 kit dành cho developer.
WatchOS 4 với Siri WatchFace mới, tích hợp Fitness Coaching và App-Browsing UI mới
Một bản update dành riêng cho Apple Watch trong tương lai cũng được công bố với tính năng và khả năng hiển thị mới, giúp trải nghiệm user trở nên dễ dàng hơn. Ngoài ra còn có bản update tập trung vào fitness, bao gồm monthly challenge nhằm tăng tính tương tác cũng như cho phép người dùng chia sẻ thông tin về work out, lượng calorie tiêu hao và những thứ khác.
Ngoài ra, app mới cũng cho phép việc tìm kiếm bài hát dễ dàng hơn trên apple watch.
Bài viết của tác giả Filip Jaskiewicz cho Hongkiat.com. Filip là COO của Magently- công ty có uy tín và nhiều năm kinh nghiệm trong lĩnh vực thương mại điện tử Magento.
Các công ty outsourcing thường chỉ được xem như một “bể chứa nhân sự”, vì không có sản phẩm riêng của mình. Tuy nhiên, là một phần của công ty tôi nghĩ rằng quan điểm này không còn phù hợp nữa. Trước đây, tôi từng đọc một bài báo của tác giả Yegor Bugayenko.
Nó cho thấy một quan điểm khác bên cạnh những quan điểm tranh luận về các dịch vụ phát triển web outsourcing (đặc biệt là các nước đang phát triển như ở Đông Âu), trong đó nhiều quan điểm được đưa ra khá thú vị.
Một mặt, ông bác bỏ các cáo buộc chống lại outsourcing, mặt khác, ông cố gắng chứng minh rằng outsourcing đã là quá khứ.
Outsourcing có thực sự kết thúc?
Tôi cũng muốn bày tỏ quan điểm của mình về cuộc tranh luận này với tư cách là một chuyên gia có 7 năm kinh nghiệm hoạt động trong lĩnh vực web development, 4 năm dẫn dắt đội ngũ phát triển web, cũng như là một doanh nhân chuyên tư vấn và làm việc với nhiều khách hàng của Magently .
Theo quan điểm của tôi, outsourcing vẫn hoạt động, nhưng theo một cách thức hoàn toàn khác cách đây 10 năm , điều mà những người từng tham gia vào cuộc tranh luận này đã không chú ý tới.
Ngành dịch vụ vẫn tiếp tục phát triển và chúng tôi cần phải theo kịp với nó. Quy luật thị trường không thay đổi, nhưng điều kiện kinh doanh và nhu cầu của khách hàng chắc chắn sẽ thay đổi
Công ty Outsourcing có trốn tránh trách nhiệm ?
Bugayenko tuyên bố rằng với các công ty Outsourcing không bao giờ có chuyện đôi bên cùng có lợi bởi mục tiêu của cả hai bên rất khác nhau. Như ông đã nói: “ Lợi ích doanh nghiệp của bạn không thể phù hợp với lợi ích của đối tác Outsourcing .”
“Đó là lý do tại sao một khách hàng tốt với họ là khách hàng trả tiền. Không phải là khách hàng với một dự án thành công, cũng không phải là khách hàng có vấn đề được giải quyết thỏa đáng, càng không phải là khách hàng với chi phí tối ưu. Và cũng không phải là một khách hàng sử dụng công nghệ tốt nhất. Tất cả đều không phải. Khách hàng tốt nhất là người trả tiền, trả rất nhiều và trả đúng thời hạn. “
“Đó là nguyên nhân gốc rễ của tất cả mọi vấn đề với công ty outsourcing.”
Không hẳn là như vậy. Hãy so sánh thử việc đó với một vấn đề thường nhật chuyện đi ăn ngoài. Có phải chúng ta luôn thất vọng khi đi đến một nhà hàng thay vì tự chuẩn bị bữa ăn cho mình?
Nếu tuyên bố của Yegor được xem là hoàn toàn đúng đắn thì điều duy nhất mà quản lý nhà hàng nên quan tâm là kiếm tiền và trả lương cho nhân viên.
Họ sẽ không quan tâm liệu rằng khách hàng của họ có hài lòng với bữa ăn và có khoảng thời gian tuyệt vời hay không, điều đáng lưu tâm là họ có thể trả giá đắt như bị đau bụng sau bữa ăn. Đây có phải là cách nó hoạt động? Tất nhiên là không!
Khi ăn ngoài, bạn thuê việc chuẩn bị bữa ăn cho mình và (trừ khi bạn đi đến một nơi không ai muốn ăn) thường thì mọi người đều muốn bạn thưởng thức nó. Họ thực sự quan tâm tới việc cung cấp một bữa ăn ngon và làm cho bạn hài lòng với dịch vụ của họ. Ngày nay, nếu một công ty đối xử với khách hàng của họ như “cash cows- con bò vắt ra tiền”, thì thường không không tồn tại lâu. Cách tiếp cận như vậy dẫn đến các dự án thất bại, khách hàng không hài lòng, họ không bao giờ trở lại, trì hoãn thanh toán và hoàn trả.
Outsourcing có mang lại lợi ích cho khách hàng?
Một dự án tốt đòi hỏi sự hợp tác của tất cả các bên liên quan. Nó phải được thực hiện đúng, quản lý tốt và khách hàng phải nắm được toàn bộ quá trình từ lúc bắt đầu đến khi kết thúc. Tuy nhiên, điều quan trọng là một dự án tốt là dự án thương mại thành công cho khách hàng. Nếu khách hàng hài lòng với dịch vụ được cung cấp, và sau đó:
Họ sẵn lòng chi trả. Chúng ta nhận được phần thưởng xứng đáng cho những nổ lực của mình còn khách hàng cảm thấy rằng họ đã hưởng lợi từ sự hợp tác. Sự hài lòng và cảm giác an tâm khi đầu tư hợp lý có ý nghĩa quan trọng quyết định việc khách hàng của bạn có quay trở lại hay không.
Khách hàng truyền tai nhau, khi đó chúng ta có được khách hàng mới và uy tín cũng được tăng thêm.
Khách hàng quay trở lại. Cho dù họ muốn phát triển dự án của họ hay để bắt đầu một dự án mới thì việc quay trở lại của khách hàng có ý nghĩa vô cùng to lớn.
Khách hài lòng là một thành công mà bất cứ doanh nghiệp nào cũng mong muốn, nó tạo nguồn động lực cho sự phát triển của bất cứ doanh nghiệp nào: từ các cửa hàng nhỏ đến các xưởng đóng giày, nhà hàng và cả các công ty phát triển web.
Tất cả có phải chỉ vì tiền?
Các doanh nghiệp đều biết rằng việc cân đối giữa ngân sách và thời hạn không phải lúc nào cũng dễ dàng. Đặc biệt đúng đối với các công ty phát triển web, khi mà các dự án luôn tìm ẩn những yếu tố bất ngờ không mong muốn.
Yegor Bugayenko có lý lẽ riêng về cách thúc đẩy các nhà phát triển web:
Động lực duy nhất thúc đẩy bạn là tiền. Không có vấn đề gì. Dự án càng dài, thì càng tốt. Chất lượng code càng tệ thì càng có nhiều tiền để bảo trì. Càng có nhiều cuộc điện thoại, các cuộc họp, các sự kiện lãng phí thời gian càng tốt. Càng có nhiều vấn đề kỹ thuật rắc rối càng tốt. Chỉ cần làm bất cứ điều gì để lấy được càng nhiều tiền từ khách hàng càng tốt.
Là quản lý nhóm phát triển web tại Magently trong nhiều năm và cho tới tận bây giờ, tôi biết rằng với công thức trên sẽ chỉ mang lại những thiệt hại và mất mát to lớn đối với công ty mà thôi.
Tôi không thể tưởng tượng được việc bỏ mặt khách hàng ở giữa vũng lầy- khi mà khách hàng đã đầu tư hàng ngàn đô la vào dự án của họ (thường là từ khoản tiết kiệm của họ) rồi bị bỏ lại với đống code chưa hoàn chỉnh và một sản phẩm không hoạt động.
Chúng tôi luôn cung cấp tài liệu và giải thích mọi thứ cho khách hàng tại các buổi Pre-sale meeting để họ biết họ đang trả tiền cho cái gì, họ sẽ nhận những gì và họ có thể mong đợi gì từ sự hợp tác với chúng tôi.
Bất kỳ cách tiếp cận nào khác cũng sẽ là vô trách nhiệm và tôi tin rằng tôi không phải là người duy nhất nghĩ như vậy.
Trong thực tế nó giống việc ai đó nói rằng nếu một chiếc xe hơi thường xuyên bị hư hỏng thì chủ nhân của nó sẽ phải mua các linh kiện sửa chữa đắt tiền từ nhà sản xuất thay vì nghĩ đến việc mua một chiếc xe mới. Hay như việc một công ty creative agency liên tục tạo ra những chiến dịch không hiệu quả, điều đó khiến khách hàng của họ quay lại nhiều hơn.
Đơn giản là cách này không hiệu quả
Chìa khóa thành công nằm ở việc đó phải là một thương hiệu mạnh và thực sự đáng tin cậy. Một thương hiệu như vậy chỉ được xây dựng dựa trên các sản phẩm tuyệt vời và dịch vụ xuất sắc. Lừa dối và chặt chém khách hàng sẽ chẳng đưa bạn đi tới đâu. Bởi vì thị trường cạnh tranh khốc liệt và sẽ chẳng có ai gắng bó với bạn lâu dài.
Thời thế đang thay đổi
Sau tất cả những gì đã nói, tôi muốn trở lại vấn đề đã đề cập ở đầu: thời thế đang thay đổi và đó là cách Outsourcing hoạt động.
Đã qua rồi cái thời bạn có thể thuê một Developer từ Ukraine hoặc Ba Lan, trả cho họ một đô la và kiếm 100.000 đô la cho sản phẩm của bạn. Tình hình kinh tế ở những quốc gia nổi tiếng về nguồn nhân lực giá rẻ đã thay đổi, lương theo giờ ngày càng tăng
Các công ty ở các nước đang phát triển trở nên tham vọng hơn và bây giờ họ có thể cạnh tranh với hầu hết các công ty khác trên thế giới
Họ không chỉ cung cấp nhân lực mà còn là một lựa chọn thay thế hoàn hảo về marketing, ý tưởng, thiết kế , khả năng ngôn ngữ,.. Bằng cách này, họ bỏ qua giai đoạn trung gian và bắt đầu hợp tác trực tiếp với khách hàng cuối cùng.
Họ tiếp thu các bài học kinh nghiệm về kinh tế, bởi họ đọc cùng một cuốn sách, cùng tham gia các hội nghị và chia sẻ cùng một kiến thức – chỉ đơn giản là ở những nơi khác nhau.
Các tập đoàn lớn vẫn đặt các văn phòng đại diện của họ tại các nước đang phát triển, tuy nhiên điều này không mang lại lợi ích cho các doanh nghiệp vừa và nhỏ. Chúng tôi đang chứng kiến sự thay đổi nhóm đối tượng mục tiêu đối với các công ty như Magently – mục tiêu không phải là công ty IT từ một quốc gia giàu có, mà là khách hàng cuối cùng muốn chúng tôi quản lý các dự án của họ. Đây là bước tiến của các công ty outsourcing: bây giờ bạn không cần tìm kiếm một công ty trung gian thay bạn làm việc với nhà cung cấp nước ngoài, bạn có thể trực tiếp thảo luận với nhà cung cấp về định hướng phát triển của công ty, bởi vì họ đã được hoàn thiện và sẵn sàng đáp ứng yêu cầu của bạn.
Tôi chắc chắn rằng đây là lý do tại sao các công ty trước đây sử dụng lao động giá rẻ từ nước ngoài bây giờ tin rằng outsourcing không còn ý nghĩa. Họ nói đúng – nó không hiệu quả với họ, bởi vì họ không phải là nhóm mục tiêu nữa.
Kết luận: Chúng ta đang ở đâu?
Tóm lại, tôi không nghĩ rằng các công ty outsourcing đã chết dù dưới bất kỳ phương diện nào. Tôi tin rằng nó đã thay đổi đáng kể và sẽ tiếp tục phát triển.
Các công ty outsoucing đã đi một chặng đường dài từ cung cấp nguồn nhân lực giá rẻ đến các đối tác bình đẳng trong cuộc thảo luận và trong thế giới ngày nay vị trí của bạn không cản trở bạn lựa chọn những người tài năng bạn muốn làm việc cùng.
Vẫn có thể được tìm thấy các công ty outsourcing ở Ấn Độ hay Trung Quốc nếu bạn vẫn muốn giá rẽ, nhưng có lẽ sự lựa chọn đắt tiền hơn có thể đưa công ty của bạn lên một tầm cao mới và mang lại cho bạn một số cộng sự tuyệt vời.
Sáng ngày 03/06, sự kiện Ngày Hội Di Động Toàn Quốc chính thức khép lại với những dư âm khó quên giữa cơn nắng nóng đổ lửa ở trung tâm của mảnh đất miền Trung.
Tiếp nối hành trình kết nối cộng đồng Mobile, chia sẻ giá trị kiến thức và cập nhật xu hướng mới, ngày cuối cùng của Vietnam Mobile Day tại Đà Nẵng đã tiếp đón gần 1000 khách tham dự cùng lắng nghe chia sẻ đến từ các chuyên gia của Google, Microsoft, MasterCard…
Mở đầu sự kiện là topic Digital Transformation của diễn giả Francis Tuấn Anh – Giám đốc truyền bá công nghệ của Microsoft Việt Nam về ứng dụng Digital Transformation vào 4 giai đoạn Engaging Customers, Empowering Employees, Optimizing Operations và Transforming Products. Với mỗi giai đoạn, anh Tuấn Anh lại đề cập đến những công nghệ mới như Advanced analytics, IoT, Realtime operations… đi kèm với các ứng dụng thực tế trong nhiều ngành nghề khác nhau tại Việt Nam và thế giới.
Tiếp theo chương trình là hàng loạt các topic khác, đi từ vĩ mô đến vi mô như ảnh hưởng của Digital, toàn cảnh Mobile app user tại Việt Nam, những ưu điểm nổi bật của Xamarin, 5 yếu tố ảnh hưởng đến doanh thu quảng cáo di động, cách monetize ứng dụng hiệu quả…
Như vậy, sau hơn 3 tuần “chinh chiến” khắp 3 miền đất nước, Vietnam Mobile Day – Ngày hội thường niên lớn nhất trong lĩnh vực ứng dụng di động đã nói lời tạm biệt với cộng đồng Developer, Marketer, Designer đang hoạt động trong lĩnh vực Mobile.
BTC hy vọng sự kiện đã góp phần cập nhật những kiến thức mới, chuyên sâu từ các diễn giả được chọn lọc mời từ các công ty công nghệ tiên phong, cùng đưa ngành công nghiệp Mobile đi lên, xứng tầm với sự phát triển chung của thế giới.
Thông thường, các bạn mới học lập trình sẽ thấy phần cơ bản rất dễ học như viết expressions, conditions, loops và object-oriented programming. Những site Code Academy,Code School còn giúp mọi chuyện đơn giản hơn nữa. Thế nhưng khi bị yêu cầu làm ra một site như trang Medium.com. Rất nhiều bạn gặp khó khăn.
Đó là bởi vì quá trình học cách tạo ra một ứng dụng hoàn chỉnh từ con số không sẽ tốn không ít thời gian. Bạn sẽ phải đầu tư công sức, xem qua một series video hoặc đọc hết ít nhất một quyển sách mới có thể hiểu hết cách làm.
Một số bạn được công ty đào tạo, cho bắt đầu với những project nhỏ và độ khó, thử thách tăng dần. Sau vài tháng, họ bắt đầu học được cách tạo ra ứng dụng dưới sự chỉ dạy và giám sát của sếp.
Nhưng vẫn còn một cách khác mà tôi gọi là cách của hacker. Dành cho những người không có sự kiên nhẫn để đọc hoặc xem hết một khóa học, sách. Họ học bằng cách vọc và thử nghiệm. Trong bài viết này, tôi sẽ chỉ bạn cách thức để làm được điều đó.
Hãy tự thử thách bản thân
Đừng chọn những project đã có sẵn mã nguồn code. Thay vào đó, tôi khuyên các bạn hãy nhắm tới các project thực thụ ngoài đời. Có thể nó đến từ một ý tưởng của người bạn. Hãy chủ động biến nó thành một project, tất nhiên với một phí nho nhỏ. Như vậy, bạn sẽ có động lực mà bạn của bạn cũng sẽ nghiêm túc trong việc này.
Chia chúng ra và xử từng đứa một
Hãy cắt nhỏ project của bạn ra thành nhiều module nhỏ. Bạn sẽ cần cẩn thận khi chia những module này. Bởi các module đều có tính năng gì đó mà user có thể dùng. Với ví dụ là trang Medium, bạn có thể chia thành:
User registration & login
Story editor dành cho việc post bài
Story lists
Notifications
Stats
Bạn có thể thấy project đã trở nên đơn giản hơn nhiều.
Hãy tạo những module nhỏ
Có tới 90% khả năng những mã nguồn của các module nhỏ này đã có sẵn (bạn có thể lấy từ nhiều nguồn mở khác nhau). Đây là điều hoàn toàn có thể chấp nhận được miễn là project của bạn xét tổng thể vẫn không phải là nguồn mở. Điều kì diệu là khi bạn kết nối tất cả các module lại với nhau và chứng kiến chúng hoạt động hòa hợp.
Vậy để tạo ra những module nhỏ thì bạn cần phải làm cho chúng thật sự hoạt động được. Vì vậy đừng suy nghĩ nhiều, trước hết cứ làm sao để nó chạy được đã. Sau đó thì cứ thử nghiệm và kiểm trả kết quả thu được. Đây là bước quan trọng nhất bởi quá trình học thật sự diễn ra từ đây. Nếu bạn vội vàng bỏ qua chỉ vì thấy nó chạy được thì sản phẩm là ra cũng chỉ là nửa vời. Hãy luôn chắc chắn rằng bạn hiểu được vì sao nó hoạt động.
So sánh
Sau khi bạn đã hiểu được cách thức thì Google sẽ là người cứu cánh cho bạn. Hãy search những framework tương tự và so sánh chúng với project của bạn. Tìm ra điểm mà bạn có thể cải thiện. Nhờ đó bạn sẽ học cách rút gọn code của mình, giúp cho chúng dễ đọc hơn và tăng hiệu năng cho ứng dụng.
Đừng để mình bị mắc kẹt
Bạn sẽ luôn gặp phải những vấn đề khó khăn, khiến bị mắc kẹt tại một thời điểm nào đó trong quá trình phát triển project. Có là do một lỗi nào đó hoặc đơn giản là nó không thể chạy được. Một lần nữa, Google sẽ cứu bạn nhờ vào khả năng tìm kiếm bá đạo. Có đến 99% khả năng, bạn sẽ tìm được phương pháp trên overflow. Còn nếu vẫn không có thì có lẽ do bạn xác định vấn đề vẫn chưa đúng. Lỡ xui xẻo nữa thì cứ up vấn đề đó lên StackOverFlow. Bạn sẽ được giúp trong vài tiếng đồng hồ.
Còn nếu bạn sử dụng open source frameworks. Thì hãy vào Github repo, cái động của developer. Và nếu framework đó có cộng đồng tốt thì vấn đề của bạn sẽ nhanh chóng được giải quyết.
Code Review
Tương tác và từ học sẽ chỉ giúp bạn được một phần thôi. Nếu bạn quen biết một coder kinh nghiệm thì hãy nhờ họ review cho code của bạn. Những lời nhận xét của họ quí giá như vàng vậy đó. Còn nếu không, bạn có thể post lên CodeReview.
Với hơn 8 năm kinh nghiệm trong lập trình iOS và tham gia phát triển vô số app khác nhau, tôi rút ra được 5 bài học quan trọng quyết định việc tạo ra một ứng dụng một cách hiệu quả, nhất quán mà lại không hề buồn chán.
Hãy cứ giữ nguyên chúng
Cứ mỗi lần bạn muốn nhắm tới cross-platform thì mọi thứ đều sẽ chỉ làm tăng thêm sự phức tạp và bug cho project của bạn. Do đó, hãy cứ giữ nguyên mọi thứ và dùng cách mà bạn thành thạo nhất. Hơn nữa, nó còn giúp việc quản lí và báo cáo ít tốn thời gian hơn. Sau 8 năm lăn lộn trong giới IT, Tôi chưa từng thấy một project lớn nào hối tiếc khi họ lựa chọn native. Nhưng số lượng thất bại của project cross-plattform thì không đếm hết được.
Với sự phát triển của công nghệ và kĩ thuật trong lập trình, external libraries thật sự không còn cần thiết nữa. Bởi hầu như mọi vấn đề đều có thể giải quyết chỉ với native frameworks. Networking là một ví dụ điển hình – bạn không cần phải dùng tới những library cao sang làm gì. Cứ build nó từ con số không và tùy chỉnh theo nhu cầu của project của bạn. Vừa đơn giản mà lại linh hoạt. Tất nhiên là có một số trường hợp cá biệt, yêu cầu bạn phải dùng đến external libraries, như những tính năng liên quan tới Google Map hoặc InterCom chẳng hạn. Tuy nhiên, cứ theo lời tôi, hạn chế hết mức có thể việc dùng tới external libraries.
Hãy quên package manager đi
Bởi vì bạn đã không muốn đụng tới external libraries, thế nên package manager cũng không còn cần thiết để quản lí chúng nữa bởi số lượng quá ít. Vì vậy, cứ thêm external libraries thẳng vào project của mình luôn. Một tool dù có tốt đến mấy nhưng nếu bạn không cần chúng thì cũng vứt đi thôi.
Để Layout trong code thay vì Storyboard
Storyboard có thể khá hữu ít cho những bạn coder còn non tay, tuy nhiên khi bạn bắt đầu phải lập trình những app phức tạp, project lớn đòi hỏi layout rõ ràng thì storyboard trở nên vô dụng hẳn. Vì thế sao ta lại không dùng Layout ngay từ bắt đầu. Tôi đã chứng kiến nhiều project có hẳn một bảng storyboard đồ sộ nhưng thật chất lại trống rỗng. Chưa kể nếu bạn xài auto layout thì nó lại rất phiền phức. Vì thế, tôi khuyên bạn hãy cố gắng đặt hết logic vào layout trong code thay vì nhờ tới storyboard hoặc auto layout. Nó cực kì đơn giản mà lại rất linh hoạt.
Core Data sẽ giúp mọi thứ dễ dàng hơn
Khi mới bước vào thế giới lập trình của iOS, phần lớn các bạn luôn tránh xa Core Data. Bởi nó phức tạp, cần rất nhiều chuẩn bị cũng như không cuốn hút đối với người mới. Đến cả tôi còn bị fail, bỏ dở giữa chừng. Mãi cho đến khi tình cờ đọc được một bài viết rất hay thì tôi mới tập dùng lại Core Data. Cuối cùng mọi thứ cũng trở nên rõ ràng, Core Data thật sự là cách tốt nhất để làm việc với Data trên iOS. Không chỉ nó vô cùng mạnh mẽ, Core Data còn giải quyết được nhiều vấn đề như persistence và data change propagation vốn tồn tại trong mọi ứng dụng.
Nếu bạn làm theo những gì tôi nói thì tin rằng quá trình phát triển project của bạn sẽ được cải thiện đáng kể. Hãy giữ mọi thứ luôn đơn giản hết mức có thể.
Mark Zuckerberg và Bill Gates là những người đã xây nên 2 công ty công nghệ trị giá hàng tỉ dollar, dù ở hai lĩnh vực khá khác nhau nhưng cả hai đều có cùng quan điểm về tình hình việc làm ở Mỹ vốn đang rất khó khăn.
Tại buỗi lễ trao bằng ở trường đại học Harvard thứ năm vừa rồi, ông chủ của Facebook, Zuckerberg, có bài phát biểu đầy mạnh mẽ về thực tại việc làm trong năm 2017, “Thế hệ của chúng ta sẽ phải đối mặt với việc hơn 10 triệu việc làm sẽ bị thay thế bởi máy móc như xe tự lái” – ông nói – “Khi ba mẹ chúng ta tốt nghiệp, việc làm luôn có sẵn. Nhưng ngày nay, công nghệ và máy móc đang loại bỏ khá nhiều việc làm. Nhiều người bị mất vị thế trong xã hội. Chúng ta cảm thấy bị mất kết nối, lạc lõng”
Gate, nhà sáng lập nên Microsoft, trong đầu tháng này, cũng truyền tải một thông điệp tương tự. Ông dí dỏm nói rằng mình không muốn bị cho là như nhân vật Benjamin Braddock (Dustin Hoffman) vốn rất nổi tiếng bởi lời thoại “Tôi chỉ muốn nói với anh một từ thôi. Chỉ duy nhất một từ….Nhựa”. Và ngày hôm nay? từ đó là “robot”. Ông tuyên bố trên tài khoản Twitter với 34.8 triệu follower rằng trí thông minh nhân tạo sẽ thay đổi tất cả. Nói cách khác, sau lại không hòa nhịp cùng sự thay đổi? Dù sao đi nữa, đó cũng chính là điều mà Zuckerberg và Gates đã làm với mạng xã hội và computer software.
Tháng 2 vừa rồi, Gate chia sẻ với Quartz rằng robot sẽ giúp giải phóng một lượng lao động “cũng như cho họ có cơ hội tập trung vào những công việc như chăm sóc người già, dạy học sinh, giúp đỡ trẻ em có hoàn cảnh đặc biệt. Những công việc đòi hỏi tình cảm và sự quan tâm của con người, vốn không có máy móc nào làm được” – Gate nói rằng cách mà chúng ta có thể kiểm soát nguy cơ nỗi dậy của robot – “Hãy chỉ để chúng thực hiện những công việc đòi hỏi máy móc và con người tập trung vào những công việc đòi hỏi trí tuệ và tình cảm”.
Zuckerberg cũng nhấn mạnh việc tìm kiếm những công việc có ý nghĩa trong thời đại kinh tế tự động hóa. “Các bạn sẽ tốt nghiệp và bước vào một thế giới đòi hỏi ta phải có mục tiêu. Và nó hoàn tùy thuộc vào chính bạn” – ông nói – “Bắt đầu với những project lớn có ý nghĩa là cách chúng ta tồn tại trong thế giới này. Tiếp theo đó, là sự bình đẳng để mọi người đều có cơ hội để được theo đuổi mục tiêu của họ” – Zuckerberg cho rằng những bạn trẻ sẽ cần phải tự tạo ra con đường cho chính mình nhưng đồng thời xã hội cũng cho phép họ sự tự do để được thất bại để có thể thành công.
1/ New college grads often ask me for career advice. At the risk of sounding like this guy…https://t.co/C68mjJ5g44
Zuckerberg và Gate đều không hề sai. Các chuyên gia nhận định rằng Robots sẽ tạo ra hơn 15 triệu lượng lao động tại U.S trong vòng 10 năm tiếp theo, nhờ vào sự phát triển của trí thông minh nhân tạo và công nghệ tự động hóa. Nói cách khác, Robot sẽ chiếm 10% lực lượng lao động. Điều đáng lo ở đây là nó cũng khiến cho ta mất đi 10% việc làm dành cho nhân sự. Và điều này đánh dấu bởi sự ảnh hưởng của công nghệ tương tự như khi chiếc máy tính đầu tiên được tung ra thị trường. Các chuyên gia còn dự đoán rằng sau 50 năm nữa, robot và máy tính sẽ thay thế con người làm gần như mọi việc. Không những thế, cuộc khảo sát do Pew Research Center tổ chức chỉ ra rằng 38% số lượng việc làm tại US sẽ bị thay thế bằng máy móc tự động hóa.
Đối với những người không muốn làm những nghề có liên quan tới máy móc, AI thì có thể chọn những sự nghiệp như họa sĩ, thầy giáo, bác sĩ, HR. Ngoài ra, các ngành liên quan đến sửa chữa như thợ mộc, thợ điện, sửa ống nước cũng sẽ không bị thay thế.
Tuy vậy, đối với những việc làm lương thấp thì khả năng bị thay thế bởi máy móc rất cao. Do đó, việc có học thức ngày càng quan trọng. Theo Marketwatch, khả năng bị thay thế đối với những việc làm với mức lương $20/giờ cao tới 83%. Trong khi tỉ lệ này chỉ đạt 31% với việc làm $30/giờ và dưới 4% với những việc được trả trên $40/giờ.
Gates cũng tin rằng các ngành nghề liên quan tới sinh học và năng lượng sẽ khá có tiềm năng. Nghành công nghiệp năng lượng cung cấp hơn 6.4 triệu việc làm cho người Mĩ. Ngoài ra, các ngành liên quan tới sinh học cũng phát triển tốt với hơn 10% mức tăng trưởng mỗi năm và hơn 1.7 triệu nhân viên.
Zuckerberg cũng đưa ra lời khuyên dành cho các bạn entrepreneur và startup company – “ Tôi sẽ nói cho bạn biết một bí mật. Chả ai biết được mình sẽ làm như thế nào khi mới bắt đầu cả. Mọi ý tưởng thường chỉ hé lộ một phần của nó. Và chúng chỉ sáng tỏ ra khi bạn bắt tay vào làm. Vì thế hãy cứ làm đi” – Ông nói – “Nếu mà tôi cần phải hiểu rõ hết mọi thứ trước khi bắt đầu thì Facebook sẽ không bao giờ tồn tại. Hình ảnh hào nhoáng trên báo chí và phim ảnh không hề đúng. Chúng rất nguy hiểm bởi khiến cho chúng ta cảm thấy tự ti và sợ hãi do không có ý tưởng hay được như vậy. Tệ hơn, là còn làm ta chùng bước để bắt đầu một project”.
Khi bạn thấy 1 đồng nghiệp code bằng chiêu trò mà bạn không hề hay biết. Lúc đó chắc chắn bạn sẽ thấy nó thật ngầu như một thiên tài.
Trong bài viết ngắn này chúng tôi sẽ chỉ cho bạn một số trick của npm. Tất nhiên là có rất nhiều thủ pháp khác nhau, nhưng tôi sẽ chỉ tập trung vào những cái hay và liên quan nhất cho việc code hằng ngày của chúng ta.
Những trick rút gọn cơ bản
Để bắt đầu, đặc biệt là với các bạn mới làm quen với npm, chúng ta sẽ cũng điểm lại một số thủ pháp rút gọn cơ bản nhưng khá là hữu ích.
Cài đặt một Package
Bình thường: npm install pkg => Rút gọn:npm i pkg.
Cài đặt Global:
Bình thường: npm i --global pkg => Rút gọn: npm i -g pkg.
Cài đặt một Package và lưu trữ nó như một Dependency:
Bình thường: npm i --save pkg => Rút gọn: npm i -S pkg
Cài đặt một Package và lưu trữ nó như một devDependency:
Bình thường: npm i --save-dev pkg => Rút gọn: npm i -D pkg.
Để biết thêm những trick rút gọn cơ bản, các bạn có thể vào đây xem.
Giờ thì tới phần hấp dẫn hơn
Initializing một Package mới
Chúng ta hẳn đều đã biết rõ về npm init, lệnh code đầu tiên khi ta muốn tạo ra một Package mới.
Tuy nhiên, với cả đống câu hỏi được đặt ra mà không sớm thì muộn chúng ta cũng sẽ chỉnh sửa thay đổi nó, thế thì sao không bỏ qua luôn?
npm init -y và npm init -f chính là câu trả lời
Running tests
Một command khác mà chúng ta đều dùng là npm test
Bạn sẽ nghĩ sao nếu tôi có cách để rút ngắn nó đi khoảng 40% mà vẫn chạy tốt? Thử nghĩ xem số lượng thời gian bạn tiết kiệm được nhiều đến thế nào.
npm t chính là cứu cánh của bạn
Liệt kê List available scripts
Khi bắt đầu với một project mới chúng ta luôn tự hỏi phải xuất phát từ đầu. Những câu hỏi thường thấy như: Ta chạy nó như thế nào? Những script nào thì available?
Phương pháp phổ biến là mở package.json file và kiểm tra section scripts
Tất nhiên, phương pháp tốt hơn (ngắn hơn) là dùng npm run để xem list của tất cả các script available.
Một lựa chọn khác là cài đặt ntl (npm i -g ntl), và sau đó chạy ntl trong thư mục chứa project. Nó đồng thời cũng cho phép chạy script, vốn rất tiện lợi.
Liệt kê ra list installed packages
Tương tự như available script, đôi khi chúng ta tự hỏi ta có những dependency nào trong project của mình.
Tất nhiên là bình thường thì sẽ phải vào package.json file để check nhưng chúng ta đều đã biết rằng có phương pháp tốt hơn.
Chúc mừng bạn đã gặp npm ls --depth 0.
Với các list của globally-installed package, ta vẫn sẽ dùng giống như trên nhưng thêm -g vào, npm ls -g --depth 0.
Chạy các locally-installed executable
Khi cài đặt một package vào trong project của mình, nó luôn kèm theo một executable, nhưng nó chỉ hoạt động khi ta dùng thông qua một npm script. Tại sao ư?
Đó là bởi vì khi thi hành một command trong terminal, nó sẽ tìm kiếm executable có cùng tên từ tất cả các path thuộc PATH environment variable. Đó là vì sao Locally-installed package đăng kí các executable vào một nơi khác chứ không phải trên PATH nên sẽ không bị tìm thấy.
Vậy nó hoạt động như thế nào khi ta dùng npm script để chạy executable? Đó là vì npm tạo ra thêm một folder vào PATH , <project-directory>/node_modules/.bin.
Bạn có thể dùng npm run env | grep "$PATH"hoặc npm run env để xem tất cả available environment variable.
node_modules/.bin, chính là nơi locally-installed package lưu trữ của executable.
Thử chạy ./node_modules/.bin/mocha trong project’s directory để xem nó hoạt động ra sao.
Đơn giản đúng không? Cứ dùng ./node_modules/.bin/<command> khi bạn muốn chạy một locally-installed executable.
Tìm ra Package của bạn trên internet
Bạn có bao giờ tự hỏi rằng repository entry trong package.json file để làm gì không?
Hãy thử chạy npm repo và xem nó hoạt động như thế nào trong trình duyệt web.
Cũng tương tự vậy đối với npm home cho homepage.
Nếu bạn muốn mở Package page trên npmjs.com, thi hãy dùng npm docs.
Chạy script trước và sau một script khác
Hẳn bạn đã quá quen thuộc với pretest, với nhiệm vụ sàng lọc code trước khi chạy test script.
Nhưng bạn sẽ rất ngạc nhiên khi biết rằng bạn có thể có pre và post scripts cho mọi script.
Nó cực kì hữu dụng cho các project mà bạn dùng npm làm build tool chính cũng như khi cần phải sắp xếp một lượng lớn script.
Bumping package’s version
Bạn có một package, bạn sẽ dùng semver cho versioning, và bạn cần bump phiên bản đó trước khi một bản release mới được tung ra.
Cách thủ công là vào package.json file và sửa bằng tay, nhưng chẳng ai có dư thời gian cả.
Thay vào đó hãy dùng npm version với major, minor hoặc patch.
Lời kết
Hi vọng qua bài viết này, các bạn đã có thể code tốt hơn cũng như gây ấn tượng với đám bạn.
Immutability – sự nhất quán là một trong những yếu tố quan trọng nhất của lập trình. Nó cho phép cho bạn viết code gọn và dễ dàng mà lại an toàn hơn. Tôi sẽ chỉ cho bạn cách để ta có được Immutability qua một số ví dụ trong Javascript sau.
Immutable object (object không thay đổi) ám chỉ các object không thể bị đổi state sau khi nó đã được tạo ra. Điều hoàn toàn trái ngược so với mutable object (object có thể thay đổi) vốn cho phép ta được thoải mái thay state của nó. Trong một số trường hợp, object vẫn được cho là Immutable mặc dù một số thuộc tính bên trong đã thay đổi nhưng state của object vẫn không khác gì so với cũ.
Immutable Array
Để hiểu rõ về bản chất hoạt động immutability thì ta nên bắt đầu với Array.
Trong ví dụ trên, arrayB được xem là dựa trên arrayA, do đó phương thức “Push” sẽ tự động thêm vào giá trị 5 vào cả 2 variable. Tuy nhiên, lúc đó Code của ta cũng sẽ tự thay đổi các giá trị khác một cách gián tiếp, vốn là điều mà bạn không muốn. Bởi nó hoàn toàn trái ngược với immutability.
Vậy ta có thể biến chúng thành Immutable Array bằng slice function, và lúc này code sẽ hành xử theo một cách khác.
Đây là điều mà chúng ta muốn. Code không tự ý thay đổi các giá trị khác.
Note: Khi sử dụng Push để thêm một giá trị vào array bất kì, bạn đang làm biến đổi chính array đó và khiến phát sinh ra những hiệu ứng (side effect) mà ta không muốn. Lúc đó, bạn cần sử dụng slice function để trả về một phiên bản copy của đoạn array trên.
Function
Giờ thì bạn đã biết cách tránh việc thay đổi các giá trị ngoài ý muốn. Nhưng làm cách nào để tạo ra một function “pure” – không có bất kì side effect nào cũng như state không bị thay đổi.
Giờ ta thử áp dụng cách thức trên, nhưng thay vì cho array thì giờ là function. Đầu tiên ta cần function có khả năng tự ý gây biến đổi giá trị.
Một lần nữa, bởi do các giá trị Input bị thay đổi khiến cho funtion mới được tạo ra ngoài ý muốn. Trong lập trình, chúng ta có một qui luật vàng đó là: mỗi lần thêm vào function, nó sẽ làm biến đổi array variable và kết quả tạo ra một thứ hoàn toàn khác.
Giờ thì ta có thể call function nhiều lần liên tiếp, và kết quả đưa ra luôn giống nhau nếu input không đổi. Đó là bởi vì array đã không còn bị tự ý biến đổi và kết quả là một function thuần khuyết (pure function).
Bạn có thể dùng spread syntax, trong ES6, để làm ngắn gọn function trên.
App của NodeJS sử dụng một khái niệm gọi là concurrency (đồng thời). Một concurrent operation có nghĩa là 2 phép tính kết hợp nhưng đều có khả năng tự hoàn thành quá trình được đặt cho chúng. Nói cách khác khi có 2 mục tiêu A và B, thì phép tính cho B không cần đợi phép tính A hoàn thành mà tự chạy luôn.
NodeJS khiến concurrency xảy ra là nhờ vào event-loop. Event loop sẽ liên tục lặp lại một event và kích hoạt bất kì các trình xử lí event. Cách thức hoạt động trên cho phép một app của NodeJS giải quyết lượng lớn các yêu cầu đến từ các người dùng. Nếu bạn muốn hiểu thêm thì hãy vào đây.
Nhiều bạn khi đọc đến đây sẽ thắc mắc rằng immutability có liên quan gì concurrency? Đó là do nhiều operation có khả năng thay đổi giá trị nằm ngoài tầm ảnh hưởng của function bằng cách của concurrent. Khiển cho output trở nên thiếu chính xác cũng như kết quả ngoài ý muốn. Vì thế hãy cẩn thận đối với các function có khả năng làm biến đổi giá trị ở ngoài phạm vi của chúng bởi nó khá là nguy hiểm.
Bước tiếp theo
Immutability là một khái niệm quan trọng mà bạn cần phải hiểu để học về lập trình. Vì thế mà tôi khuyến khích bạn đọc thêm bài ImmutableJS, của các delopver tại Facebook, về library chứa cấu trúc immutable data như Map, Set, và List
Sáng ngày 27/05, sự kiện Vietnam Mobile Day tiếp tục hành trình lan tỏa sứ mệnh kết nối và chia sẻ giá trị kiến thức đến cộng đồng Hà Nội. Hơn 4000 nhà phát triển, chuyên gia truyền thông, đại diện các Tech startup… đã đắm chìm trong không gian Công nghệ – Mobile đa sắc màu suốt 8 tiếng đồng hồ với gần 50 chuyên đề và diễn giả cùng hàng chục gian hàng triễn lãm kết hợp nhiều hoạt động thú vị thu hút sự quan tâm của người tham dự.
Dấu ấn của Cuộc Cách Mạng Công Nghệ 4.0
Như thường lệ, Vietnam Mobile Day luôn mở màn với các nội dung mang tính định hướng, dự báo bức tranh tương lai, cung cấp số liệu toàn ngành nhằm hỗ trợ cá nhân, doanh nghiệp định hướng công việc của bản thân và hoạt động kinh doanh chung.
Năm nay, Phiên Khai Mạc ghi đậm dấu ấn của các bài tham luận liên quan sức ảnh hưởng của thiết bị di động nói chung và Cuộc Cách Mạng Công Nghệ 4.0 nói riêng do chính những đại diện đến từ các tập đoàn công nghệ lớn của thế giới chia sẻ.
Theo chị Đặng Thúy Hà – Nielsen Việt Nam, điện thoại di động đang thay đổi sâu rộng ngành Thương mại điện tử tại Việt Nam. Điều này xuất phát từ những nguyên nhân cụ thể như: người dùng Việt là người tiêu dùng kết nối có thời gian online nằm trong top 3 khu vực, thường xuyên sử dụng điện thoại để tìm hiểu sản phẩm (79%), xem xét phản hồi về sản phẩm (75%), so sánh giá cả (63%).
Lúc này, vai trò đặt lên vai doanh nghiệp là phải áp dụng được các chuyển đổi về công nghệ số như chính anh Huỳnh Bảo Toàn – Microsoft Việt Nam đã chia sẻlà System of Intelligence với bốn khía cạnh chính xoay quanh Transform your products, Optimize your operations, Empower your employees và Engage your customer.
Bên cạnh đó, BTC còn dành riêng thời gian buổi chiều của khán phòng A để bao phủ các nội dung về AI – Trí thông minh nhân tạo và IoT – Internet of Things, tiêu biểu là những ứng dụng demo của AI trong gia đình, văn phòng thông minh, hệ sinh thái của Amazon và Google cũng như trong ngành Logistics, chế tạo Robot.
Phát triển ứng dụng nhanh hơn – Truyền thông ứng dụng hiệu quả hơn
Vốn là “đặc sản” tạo nên thương hiệuVietnam Mobile Day, năm nay các chủ đề chuyên sâu về lập trình được chia sẻ tại Hà Nội đa phần tập trung vào xu hướng phát triển Đa nền tảng với những ưu điểm không thể phủ nhận về chi phí, thời gian và nguồn lực. Tiêu biểu có thể kể đến những chủ đề như Lập trình app sử dụng React Native, so với Android/ iOS, Phát triển ứng dụng di động với Xamarin, Serverless Design Patterns and Best Practices, Mobile backend as a serive (MBaaS), Kinh nghiệm tối ưu trải nghiệm người dùng trên Mobile tại thegioididong.com...
Đặc biệt, khi khâu truyền thông ứng dụng được đánh giá là có tầm quan trọng bậc nhất trước thực trạng thị trường ứng dụng đang có dấu hiệu bão hòa, các chuyên gia đã không ngần ngại đúc kết bí kíp từ quá trình làm việc của mình trong hàng loạt các chủ đề như: Các bước xây dựng kế hoạch truyền thông cho 1 ứng dụng di động, 5 yếu tố ảnh hưởng đến doanh thu quảng cáo của ứng dụng, Tối ưu hiệu quả chiến dịch Marketing/quảng cáo trên di động, Killer feature sẽ làm cho ứng dụng của bạn trở nên khác biệt…
Hỗ trợ startup – Sứ mệnh tự hào của Vietnam Mobile Day 2017
Bên cạnh các gian hàng triển lãm hỗ trợ Tech startup giới thiệu sản phẩm, giao lưu mở rộng mối quan hệ hợp tác thì mảng nội dung của Vietnam Mobile cũng chú trọng vào bài học kinh nghiệm đặc thù riêng cho startup như: Kinh nghiệm làm mobile và những bài học thất bại: Từ R&D tới Production và Business, Cách build Youtube viral channel/ viral content cho start up, Triết lý “Zero Cost” marketing cho startup, Phát triển sản phẩm Mobile App theo mô hình Lean Startup trong xu hướng phát triển IT hiện nay, Câu chuyện về một dự án thất bại…
Chẳng hạn, với mô hình Lean Startup với mục tiêu tinh gọn quy trình phát triển sản phẩm, anh Nguyễn Trung Thành của tập đoàn VNG cho rằng các startup có thể tiết kiệm chi phí và giảm thiểu rủi ro bằng cách vận dụng 5 phương pháp cốt lõi từ mô hình này là:
Minium Viable Product (MVP) – đưa ra các phiên bản sản phẩm với chi phí tối thiểu nhưng nhận được phản hồi có giá trị cao từ user, dùng các kiểm nghiệm ý tưởng
Continuous Deployment: đưa các phiên bản càng nhanh càng tốt đến người dùng, giảm vòng đời phát triển ứng dụng
Actionable Metrics: sử dụng các công cụ tracking để quyết định về sản phẩm
Pivot: liên tục thay đổi, không giới hạn về chức năng và ý tưởng
Build – Measure – Learn: quy trình Ideas – Build – Products – Measure – Data – Learn
Có thể nói, với sự hỗ trợ hợp tác của các đơn vị VECOM, MasterCard, Mobifone, FTC Verisign, Ví Việt, PA Việt Nam, Hiệp Hội Internet Việt Nam, Appota, Gear Inc, VietGuys, FPT Telecom, NganLuong.vn,Vietnam Mobile Day đã để lại những dấu ấn không thể quên, đem đến những kiến thức bổ ích, những giá trị vô hình và hữu hình cho cộng đồng Mobile tại Hà Nội.
Đừng quên cuộc “hạ màn” đáng mong đợi của Vietnam Mobile Day 2017 tại Tp. Đà Nẵng vào ngày 03/06 tới nhé!
Thời gian & địa điểm: 03/06/2017 tại One Opera Danang Hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng
JavaScript là một trong những ngôn ngữ lập trình phổ biến nhất thế giới. Được sử dụng cho web pages, software, mobile apps, ứng dụng trong console, etc.
JavaScript hiện diện ở khắp mọi nơi. Tuy nhiên, có nhiều ứng dụng sử dụng JavaScript gặp vấn đề về hiệu năng. Và trong bài viết hôm nay, chúng ta sẽ nói về cách tối ưu hóa các ứng dụng JavaScript.
Throttling & Debounce
Khi ta thêm event listener cho những hành động của user như scrolling, chúng ta thường bỏ qua một điều là listener sẽ tự hoạt động khi event được kích hoạt. Điều này có khả năng dẫn đến hiện tượng “nghẽn cổ chai” đối với các ứng dụng của Javascript.
Lấy scroll event làm ví dụ, khi chúng ta làm như sau:
function scrollHandler() {
return console.log('yippeeeee');
}
window.addEventListener('scroll', scrollHandler());
Mỗi lần user scroll, “yippeeeee” sẽ logged vào console.
Cũng không có gì đáng lo đúng không? Nhưng đối với level hoạt động cao hơn như kiểm tra element trong viewport để ta có thể tạo animate, thì nó sẽ khá tốn kém memory cũng như thời gian xử lý chậm hơn.
Một cách đơn giản để sửa vấn đề trên là dùng debounce hoặc throttle trong function scrollHandle.
Nghe có vẻ phức tạp, nhưng:
Debouncing bảo đảm một function sẽ không bị gọi lại sau một khoảng thời gian.
Trong khi
Throttling giới hạn số lần gọi tối đa cho một junction trong một khoảng thời gian nhất định.
Như vậy, với ví dụ trên về scrolling, chúng ta sẽ debounce nhờ vào Lodash:
window.addEventListener('scroll', _.debounce(scrollHandler, 300));
// or
window.addEventListener('scroll', _.throttle(scrollHandler, 300));
Ngoài ra, tôi cũng khuyến khích bạn sử dụng library Underscore. Tất nhiên là bạn hoàn toàn có thể sử dụng một trong hai library ở trên hoặc là cứ lấy đoạn code function từ codebase mà dùng cho ứng dụng của mình.
Chuyển qua HTTP/2 và đừng Bundle
Trong khi HTTP/2 đang ngày càng phát triển và được biết đến nhiều hơn, thì việc kết hợp các JavaScript files thành một bundle lớn đã không còn cần thiết nữa.
HTTP/2 có chức năng của một multiplexed – nói cách khác nó được tạo ra để có thể thực hiện và quản lí nhiều file request cùng một lúc. HTTP/2 sử dụng chỉ một TCP connection để request nhiều file, không như HTTP/1 khi ta bắt buộc phải chia connection ra cho từng request riêng biệt. Nhờ đó mà HTTP/2 có tốc độ xử lý nhanh hơn hẳn.
Như vậy, việc đưa ra nhiều file lại là một việc khá tốt nếu bạn sử dụng HTTP/2. Tất nhiên là đừng quá nhiều (tham thì thâm mà).
Lược bỏ những thứ dư thừa
Nếu bạn sử dụng NPM để cài đặt các dependencies, thì hẳn bạn cũng nhận ra build file của mình chứa đầy rác. Theo như Guy Fieri đã nói, bạn sẽ không ngờ được file của mình nó chứa nhiều thứ vớ vẩn đến không ngờ.
Vì thế, thay vì phải thêm cả một lượng dữ liệu ngang với database chỉ để dùng một phần của chúng. Hãy lấy Lodash làm ví dụ, nó có rất nhiều function mà chúng ta có thể sẽ dùng tới, thay vì cứ giữ tất cả mọi thứ mà user có thể sẽ cần tới, thế thì tại sao không yêu cầu những gì chúng muốn.
Như thế này đây:
// Load the full build.
var _ = require('lodash');
// Load only the array helper.
var arr = require('lodash/array');
// Load only the debounce function.
var debounce = require('lodash/debounce');
Làm như trên sẽ giúp bạn giảm kích cỡ của file cũng như giúp tốc độc xử lí nhanh hơn.
Minify – Giảm thiểu
Là một trong những kĩ thuật tối ưu hóa trong Javascript được mọi người bàn tán nhất
Minification ám chỉ việc ta rút bỏ những yếu tố không cần thiết và tính năng cồng kềnh trong Javascript Source.
Những yếu tố này bao gồm comments, semi-colons, whitespace etc. Ngoài ra giảm thiểu sự cồng kềnh bằng rút ngắn function và tên variable, giảm thiểu đồ dài của if-else và các thuật toán khác.
async và defer là hai attributes chúng ta có thể thêm vào script tags để giúp chúng load chạy không đồng bộ đến các page hoặc hoãn lại cho đến khi page đã load hết.
Lưu ý rằng async hoặc defer không block DOM khỏi rendering, và giúp cho ứng dụng chạy nhanh hơn
<!-- load meh.js asynchronously to the page -->
<script source="meh.js" async></script>
<!-- load meh.js after the page has loaded -->
<script source="meh.js" defer></script>
Recycle/Reduce the Dom
Các bạn có thấy rằng Facebook, Twitter, Instagram, 9gag và nhiều trang website khác có tính năng scrolling vô hạn không. Tuy nhiên, scrolling vô hạn sẽ khiến cho việc thêm
vào content nặng cho DOM, thì ta sẽ phải cần query nhiều yếu tố nữa. Như vậy nó sẽ khiến hiệu năng bị giảm và ảnh hưởng tới tốc độ xử lí cũng như load của trình duyệt web bởi quá ăn RAM (tốn nhiều memory)
9gag có cách giải quyết vấn đề trên khá là hay. Sau khi user đã đọc được một số lượng meme nhất định, 9gags sẽ đưa ra một nút để bạn dùng để dọn đi những meme bạn đã đọc. Nếu bạn nhấn vào thì có thể thấy các meme trước đó sẽ bị xóa để những meme mới hiện ra và nhờ đó tốc độ load xử lý được cải thiện.
Cách giải quyết của 9gag rất tốt, nhưng bạn cũng có thể làm cách khác là tái chế lại các yếu tố của DOM. Nói cách khác, sau khi các yếu tố liên quan tới hiển thị hoàn thành nhiệm vụ thì sẽ được tái chế lại như ví dụ dưới đây:
requestAnimationFrame
Nhiều người cho rằng JavaScript animation khá chậm. Sự thật là nó chỉ chậm khi được lập trình một cách sơ sài. Nhưng ta có thể cải thiện điều đó.
Với requestAnimationFrame, chúng ta chỉnh định trình duyệt web gọi một function để render một frame. So với setTimeout, tốc độ được cải thiện nhiều lần nhờ vào việc kích hoạt GPU để có thể render hình ảnh nhanh nhất có thể.
var start = null;
var element = document.getElementById('SomeElementYouWantToAnimate');
element.style.position = 'absolute';
// Takes in the timestamp of the current frame
function step(timestamp) {
if (!start) start = timestamp;
// calculate total time passed
var progress = timestamp - start;
// get the number of pixels the element should move every frame
element.style.left = Math.min(progress / 10, 200) + 'px';
// only animate if time passed is lesser than 2000ms or 2 seconds
if (progress < 2000) {
window.requestAnimationFrame(step);
}
}
window.requestAnimationFrame(step);
Nhìn thì có vẻ khá rắc rối chỉ để cho một animation đơn giản. Tuy nhiên nhờ vào các JavaScript libraries như Anime.js, Gsap mà công việc trên trở nên thật dễ dàng.
Dùng ở chế độ Offline
Một trong những tính năng của JavaScript service worker là cache file để dùng khi bạn offline. Hơn nữa, các file không chỉ cached để dùng lúc không có mạng mà còn có thể dùng nếu có mạng kết nối lại. Nhờ đó, ứng dụng có thể bỏ qua bước request JavaScript file mà lấy thẳng từ cache của nó vốn sẽ nhanh hơn nhiều lần so với lấy từ server.
Hãy dùng tới Promises
JavaScript promises sử dụng một API để miêu tả code và là một native function, chúng có khả năng tinh chỉnh và nên được dùng thường xuyên. Mặc khác, promises còn là asychronous (không đồng bộ), nên nó không bị block và sẽ cải thiện tốc độ xử lí cho ứng dụng.
Hãy dùng profiler cho code của bạn
Chrome developer tool cực kì mạnh mẽ với nhiều tool khác nhau. Ngoài console, DOM inspector, nó còn có cả profiler.
Còn được gọi là “Memory Panel”, profiler sẽ check và chạy nhiều bài test trên ứng dụng web của bạn để kiểm tra có bị memory leak (thất thoát bộ nhớ) không. Trong trường hợp có xảy ra, profiler sẽ phân tích và hiển thị trong một bản đồ thị, cho bạn biết ứng dụng có bị hiện tượng nghẽn cổ chai và memory leak hay không.
Lời kết
Tôi tin rằng nếu bạn làm theo những cách trên thì ứng dụng Javascript của bạn sẽ nhanh hơn hẳn. Và với sự phát triển của ngôn ngữ lập trình này, tin rằng vẫn có nhiều cách nữa mà bạn sẽ khám phá trong tương lai.
Bạn có thường hay tự hỏi rằng mọi người muốn làm việc cho công ty nào nhất?
LinkedIn nắm trong tay câu trả lời cho câu hỏi trên dựa trên kết quả từ báo cáo từ cuộc khảo sát top các công ty 2017.
Nhờ vào thông tin thu thập được từ hơn 500 triệu thành viên, LinkedIn xếp hạng 50 công ty được người dân ở Mỹ mơ ước được vào làm. Bảng xếp hạng dựa trên những yếu tố như mức độ nổi tiếng, lương, chất lượng làm việc và các chính sách cho nhân viên. Bạn có thể xem thêm tại đây.
Các công ty góp mặt trong bảng xếp hạng đến từ nhiều lĩnh vực khác nhau, bao gồm các ông lớn công nghệ cho đến ngân hàng, media.
Sau đây là top 25 công ty được mọi người mong muốn vào làm nhất:
Capital One
Thành lập tại Tysons Corner, Virginia. Capital One là công ty cổ phần ngân hàng.
Số nhân viên toàn cầu: 47,300
Adobe
Là công ty phần mềm với chính nhánh chính đặt tại San Jose, California.
Số nhân viên toàn cầu: 16,500
Stryker
Được thành lập vào 1946, Stryker nằm ở lĩnh vực công nghệ y tế.
Số nhân viên toàn cầu: 33,000
BlackRock
BlackRock là công ty quản lý đầu tư toàn cầu, được thành lập vào 1988
Số nhân viên toàn cầu: 13000
JLL
JLL là một công ty về bất động sản với chi nhánh “mẹ” nằm tại Chicago, Illinois.
Số nhân viên toàn cầu: 77000
JPMorgan Chase & Co.
JPMorgan Chase & Co. là ngân hàng lớn thứ sáu trên toàn thế giới, xét về mặt tài sản
Tổng số nhân viên toàn cầu: 240000
Visa
Được thành lập vào 1958 với cái tên là BankAmericard, Visa là một công ty về dịch vụ tài chính.
Tổng số nhân viên toàn cầu: 14000
CBRE
Trụ sở chính tại LA, California, CBRE được biết đến từ các hoạt động bất động sản thương mại của công ty.
Tổng số nhân viên toàn cầu: 75000
Twitter
Mạng xã hội Twitter xuất hiện vào năm 2006
Tổng số nhân viên toàn cầu: 3500
Under Armour
Under Armour, chi nhánh tại Baltimore, Maryland, là một công ty chuyên sản xuất đồ thể thao.
Tổng số nhân viên toàn cầu: 14000
Workday
Được thành lập từ 2005, Workday là nhà cung cấp dịch vụ tài chính đám mây với trụ sở đặt tại Pleasanton, California.
Tổng số nhân viên toàn cầu: 6600
Dell Technologies
Nằm tại Round Rock, Texas, Dell chuyên phát triển, bán và cung cấp dịch vụ hỗ trợ cho máy tính cá nhân.
Tổng số nhân viên toàn cầu: 145000
McKinsey & Co.
Là một công ty có chi nhánh “mẹ” tại thành phồ NewYork, chuyên cung cấp dịch vụ tư vấn quản lí với các bản báo cáo, phân tích.
Tổng số nhân viên: 25000
Netflix
Thành lập vào 1997 tại Scotts Valley, California, Netflix là công ty về dịch vụ giải trí.
Tổng số nhân viên: 3200
Airbnb
Airbnb, được lập ra vào 2008 và có trụ sở tại San Francisco, chuyên cung cấp dịch vụ y tế online.
Tổng số nhân viên: 2000
Comcast NBCUniversal
Tập đoàn truyền thông Comcast NBCUniversal có chi nhánh chính tại 30 Rockefeller Plaza, New York City, New York.
Tổng số nhân viên: 160000
Walt Disney Company
Được thành lập vào 1923 tại Burbank, California, Walt Disney là tập đoàn truyền thông lớn thứ 2 thế giới.
Tổng số nhân viên: 195000
Time Warner
Time Warner là một tập đoàn về giải trí và truyền thông đại chúng, được sinh ra vào 1990 với trụ sở tại thành phố NewYork.
Tổng số nhân viên: 25000
Apple
Chi nhánh nằm ở Cupertino, California, Apple là công ty công nghệ có doanh thu cao nhất thế giới.
Tổng số nhân viên: 110000
Tesla
Tesla là một công ty nằm ở Palo Alto, California, chuyên về máy móc và pin mặt trời cũng như xe chạy bằng điện.
Tổng số nhân viên: 30000
Uber
Uber là công ty về dịch vụ vận chuyển với chi nhanh chính tại San Francisco, California.
Tổng số nhân viên: 12000
Salesforce
Salesforce tập trung về lĩnh vực công nghệ điện toán đám mây
Tổng số nhân viên: 25000
Facebook
Được thành lập vào năm 2004, Facebook là một công ty về mạng xã hội với trụ sở chính tại Menlo Park, California.
Tổng số nhân viên: 17000
Amazon
Sáng lập bởi Jeff Bezos vào 1994, Amazon là đại lý bán lẻ online với chi nhánh “mẹ” tại Seattle, Washington.
Tổng số nhân viên: 341400
Alphabet
Alphabet, Công ty đằng sau Google, là kẻ khổng lồ công nghệ trú ngụ ở Mountain View, California.
Tôi luôn yêu thích các phần mềm open-source. Thật sự là rất khoái luôn. Bởi khả năng mở rộng, kiểm soát cũng như tùy chỉnh theo ý thích. Làm sao mà khiến ta có thể ghét được chứ?
Hơn nữa, tôi thật sự ngưỡng mộ việc hàng chục, trăm và đôi khi là hàng ngàn các developer cùng nhau hợp tác phát triển một project. Họ thật sự giúp thế giới tốt đẹp hơn từng chút một.
Và hôm nay tôi sẽ nói về một project nguồn mở yêu thích nhất của tôi: hệ điều hành OpenBSD (Đã được hơn 20 năm)
Sự tích mối tình vụng trộm của tôi và OpenBSD
Năm 1993, khi tôi vừa lên 6 tuổi,thì được ba mua cho 2 anh em chiếc máy tính đầu tiên là Laser 286/2X. lúc đó, nó khá hoành tráng với 2 processor, 45meg HDD với vài megabytes of RAM (4MB nếu tôi không lầm). Laser 286/2X chạy được MS-DOS, WordPerfect 5.1 và một số game giải trí.
Tuy nhiên, tôi lại chỉ tò mò về cách hệ điều hành hoạt động. Vì thế mà tôi nhanh chóng học và thuần thục MS-DOS, QBasic cũng như Windows cho dùng Workgroups 3.11, một phần mềm thầy dạy tiểu đã học tặng cho tôi.
Nhiều năm sau, khi vào trung học cơ sở, tôi gặp Giel, một đứa khá là mọt sách như tôi. Thế nên hai đứa nhanh chóng thành bạn thân. Giel cũng chính là người đã giới thiệu tôi với Red Hat, cùng KDE 1.0.
Thời điểm trên, tôi vẫn chưa hề biết gì về khái niệm “Open-source” cả, thế nên ngay lập tức bản thân đã khá tò mò về nó. Do chuyện cũng lâu nên tôi không nhớ rõ chi tiết nhưng bản thân cũng đã thử qua nhiều phiên bản hệ điều hành khác nhau như SuSE, Mandrake, và cuối cùng là Slackware.
Sau một thời gian, khái niệm “Open source” bắt đầu ăn sâu vào trong người. Khi đó, tôi nhận ra mình thật may mắn bởi được phép sử dụng sản phẩm vốn là kết quả của sự đóng góp từ hàng ngàn developer trên khắp thế giới.
Từ Linux qua đến *BSD
Kể từ giây phút đó, tôi dành hầu như tất cả thời gian rảnh vào IRC channel và Usenet, thu thập kiến thức cũng như bàn luận, trao đổi ý tưởng.
Trong một lần tình cờ, tôi bắt gặp *BSD thông qua một bài viết cho rằng nó không chỉ đơn thuần như một phiên bản Linux mà còn là một hệ điều hành khác biệt với mục tiêu, ý tưởng riêng nhưng tốc độ phát triển còn chậm.
Vì tò mò, tôi ngay lập tức xài thử FreeBSD nhưng do cảm thấy nó không thoải mái nên lại trở về với Linux. Thế nhưng lúc đó OpenBSD xuất hiện. Dù vậy, tôi vẫn chưa thực sự sẵn sàng chuyển qua bởi đã quá gắn bó với Linux.
Thế nên tôi quyết định cài hai hệ điều hành OpenBSD/Linux. Và khoảng sau vài tuần, tôi càng ngày yêu OpenBSD hơn và quyết định bỏ luôn Linux.
Lợi ích của OpenBSD
Trước hết tôi xin nói rằng là bản thân khá cuồng OpenBSD. Đó là bởi vì những lợi thế vô cùng đặc biệt khi bạn xài nó:
Cực kì an toàn và bảo mật
OpenBSD có chiến tích khá ấn tượng khi nói về tính bảo mật. Phiên bản cài đặt gốc chỉ có 2 kẻ hỡ trong suốt hơn 20 năm phát triển. Khi so sánh với Window, Linux hoặc FreeBSD, vốn có hàng chục đến trăm bug và kẽ hở, thì OpenBSD càng trở nên nổi bật hơn.
Mọi thứ trong OpenBSD đều được ghi lại kĩ lưỡng. Trang man-page là một trong những nơi tuyệt vời cho bạn tìm kiếm thông tin về cú pháp của một trương trình hoặc function của nó.
OpenBSD là một project với nguồn mở (Open Source)
Có thể đây là một điều khá kì lạ, bởi tôi đã nói về việc này khá nhiều ở trên. Nhưng tôi thật sự muốn mở rộng thêm về việc này.
Khi mà nhiều hệ điều hành có proprietary, closed source driver thì OpenBSD thì lại không.
Hơn thế, các closed source driver thì không thể bị kiểm tra, khiến cho việc bị tấn công dễ xảy ra. Ngoài ra, chúng còn có thể tồn tại các lỗi bug, có thể bị công kích và thậm chí là vi phạm qui tắc bản quyền phần mềm.
Nếu bạn muốn đào sâu hơn về vấn đề này thì hãy vào fw_update
Bởi sự gọn gàng và đơn giản
OpenBSD thật sự rất gọn gàn, đó là điều không cần bàn cãi. Bởi nó không bao gồm hàng tá các tiện ích không cần thiết như Linux.
Điều này càng rõ ràng hơn trong quá trình cài đặt. Installer sẽ hỏi bạn có cho phép cài đặt SSH cũng như bạn có muốn chạy graphical interface hay không. Nói cách khác, tự do và có lựa chọn chính là điểm sáng của OpenBSD. Bạn hoàn toàn có quyền cài đặt phần mềm và ứng dụng mình muốn (pkg_add gnome)
OpenBSD là hệ điều hành tôi dùng hàng ngày cho desktop, network và phần lớn các server của mình.
Có thể nó không hoàn hảo trong một số tình huống bởi không có được các phần mềm phức tạp vốn chỉ dành riêng cho Linux hoặc Windows.
Do vậy mà tôi vẫn dùng tới Linux cho một số hosting platform bởi vấn đề không tương thích. Có thể xem nó như là một điểm yếu của OpenBSD.
Tuy thế, tôi vẫn chọn OpenBSD và nếu các bạn mới tìm hiểu về máy tính cũng như các hệ điều hành thì OpenBSD sẽ là một lựa chọn tuyệt vời, giúp cho bạn biết được cách chúng hoạt động như thế nào.
Nếu giờ mà có quay ngược thời gian bắt đầu lại từ đầu thì tôi chắc chắn vẫn sẽ chọn OpenBSD ngay lập tức.
Làm thế nào để bạn có thể viết code thật hay khi làm bài test vào vị trí lập trình viên của các công lớn?
Theo các chuyên gia phỏng vấn tại Gainlo, phần lớn các ứng viên khi được yêu cầu viết code thử thì chất lượng khá là thấp, bao gồm bug, cách viết dở, phức tạp, không nhất quán,… Một điều đáng quan tâm hơn là nếu bạn có khả năng code gọn và “sạch” thì rất dễ được nhận vào làm bởi vì ứng dụng của bạn sẽ ít bị bug, lỗi mà lại dễ sửa.
Trong bài viết này, chúng tôi sẽ đưa ra những tip và trick thực tiễn nhằm giúp bạn cải thiện chất lượng code nhanh nhất có thể. Thậm chí, một số cách chỉ tốn của bạn 30 phút thôi nhưng chúng đều rất hữu ích và không đòi hỏi bạn phải có kiến thức thâm sâu mới làm được.
Chọn ngôn ngữ lập trình
Đa phần các công ty đều cho phép ứng viên được tự do chọn bất cứ ngôn ngữ nào mà họ thích và thường gặp nhất chính là C++ và Java. Mặc dù chúng không có sự cách biệt mấy bởi cả hai đều quá nổi tiếng, tuy nhiên từ dữ liệu thu thập được, C++ lại có những thế mạnh nổi trội hơn hẳn so với Java.
Đầu tiên, C++ có cú pháp ngắn gọn hơn. Các bạn nên biết rằng, thông thường, công ty sẽ chỉ cho khoảng 20 phút để giải một vấn đề code và nếu lược ra khoảng thời gian ta suy nghĩ, thì chỉ còn xấp xỉ 10 phút để code thôi. Như vậy, C++ sẽ cho phép bạn giải quyết vấn đề nhanh hơn và gọn hơn. Hãy thử so sánh list/vector và class, bạn sẽ thấy ngay Java rườm rà thế nào.
C++ pointer là một tool cực kì tuyệt vời cho việc làm test khi đi phỏng vấn.
Như nhiều người khác, tôi cực kì ghét pointer bởi dễ bị lỗi và nhìn xấu. Tuy nhiên, nó lại khá hữu ích trong trường hợp test coding trong phỏng vấn. Ví dụ, pointer sẽ ngay lập tức cho phép bạn xác định một phương pháp để có thể chạy nhiều giá trị cùng một lúc với pointer đóng vai trò như param.
Ngoài ra, Python cũng là một lựa chọn khá tốt mặc dù không phải ai cũng rành về nó. Tuy vậy, cú pháp rõ ràng đơn giản khiến Python trở thành một ngôn ngữ cực kì mạnh mẽ đối với các bài test về coding trong phỏng vấn. Thế nên nếu bạn giỏi Python thì hãy dùng nó ngay.
Phong cách viết code chuẩn
Mặc dù cách viết code mỗi nơi mỗi khác, nhưng bạn vẫn phải chú ý tới bởi code xấu thể hiện sự thiếu chuyên nghiệp của bạn. Bạn có thể học theo phong cách của Google trong Java,C++ vàPython vốn rất nổi tiếng.
Hơn nữa, ta cũng cần chú ý đến việc đặt tên cho các variable. Mặc dù việc gọi chúng là X,Y hoặc Z thực sự không nên nhưng trong trường hợp này thì nó lại giúp bạn tiết kiệm rất nhiều thời gian. Đừng đặt những cái tên dài ngoằng bởi điều quan trọng nhất là phải khiến nó dễ đọc, dễ hiểu cũng như tiện gỡ bug cho bạn và cả người phỏng vấn.
Giữ cho code luôn sạch và hoàn chỉnh
Khi tôi nói hoàn tất tức là code của bạn phải có đầy đủ mọi yếu tố để có thể complie và chạy được. Nếu vấn đề đặt ra cho bạn là cách áp dụng một function, thì hãy bắt đầu với bước declaration thay vì cắm đầu viết trực tiếp. Còn nếu là xác định class thì đầu tiên sẽ phải là phân tích class.
Ngoài ra, bạn cũng cần phải khai báo ra tất cả variable. Thật ngạc nhiên thực tế lại ngược lại khi có khá nhiều ứng viên cứ sử dụng variable mà không cho biết nó ở đâu ra cả.
Về vấn đề code gọn và sạch, ý của tôi ở đây ám chỉ vẻ ngoài của nó. Khi bạn viết code trên bảng trắng, thì việc viết cho đẹp, cho sạch luôn được ủng hộ. Bởi có một số kí tự dễ bị nhầm lẫn như “q” với 9 và “z” với 2, vì thế hãy luôn viết thật rõ ràng.
Cũng nên bỏ việc dùng mũi tên để thêm code vào theo ý bạn, nhìn rất xấu. Bạn có thể cho thêm space giữa các dòng phòng khi muốn thêm thắt hoặc là phải viết cẩn thận và chậm.
Ngắn gọn
Hãy giữ cho code của bạn thật ngắn gọn hết mức. Có rất nhiều lợi ích cho việc đó. Đầu tiên, việc bug xuất hiện ít hơn bởi tỉ lệ bug/dòng luôn thấp. Mặc khác, người phỏng vấn sẽ rất ấn tượng khi bạn đưa ra được câu trả lời chính xác mà ngắn gọn. Hơn nữa, viết ngắn thì sẽ tiết kiệm được thời gian.
Tất nhiên để làm được việc này thì ta cần phải rèn luyện rất nhiều và lời khuyên của tôi là khi bạn viết code, hãy luôn lọc và cải thiện giải pháp của mình để khiến nó ngắn hơn cũng như nhận ra một số kiểu vấn đề mà bạn có thể dùng cách riêng của mình. Hẳn bạn đã chán việc phải viết những đoạn code dài ngoằn mà vô nghĩa.
Thay vào đó bạn có thể nhờ tới một số Hack sau:
Dùng C++ auto trong loop. Thay vì phải viết
for(int i = 0; i < array.size(); ++i)
Bạn có thể dùng auto như sau
for(const auto& element : array)
Cố gắng đặt “if” và “for” trong cùng một dòng
for(const auto& ele : array) if (ele.attr) res[++i] = ele.val;
Một điều rất đơn giản nhưng các ưng viên lại hay bỏ qua. Hãy luôn kiểm tra xem input có NULL, empty, positive, etc. Và đừng bao giờ tự nhủ rằng bạn được cho một valid param.
Hơn nữa, khi bạn muốn test phương pháp của mình, hãy dùng một số input “quái quái” tí để coi kết quả như thế nào. Hãy bảo đảm phương pháp của bạn đủ mạnh mẽ để xử lí hết tất cả mọi trường hợp được đặt ra.
Tránh mất thời gian vào việc define các function không quan trọng
Một điều thường gặp ở các ứng viên là họ hay đặt quá nhiều thời gian vào việc define các function một cách không cần thiết. Tuy nhiên, nó sẽ chỉ khiến mọi thứ càng trở nên rắc rối và tốn thời gian hơn.
Đa phần các câu hỏi sẽ không đòi hỏi ta phải define quá 2 function và chỉ những function phụ không cần thiết thường nằm trong 3 trường hợp sau:
Utility function hay swap function
Được dùng nhiều lần, thế thì bạn nên chỉ viết một lần thôi
Nó nằm ở một phần khác so với function chính
Vừa nói vừa viết
Rất nhiều ứng viên im lặng khi đang coding, đó là điều không nên mặc dù đúng là bình thường ta không nói chuyện khi code. Ý tưởng ở đây là tranh thủ thời gian viết code để trò truyện với người phỏng vấn vốn rất có lợi cho bạn.
Trước tiên, nó giúp cho họ hiểu rõ hơn về code của bạn. Khá nhiều người cho rằng code của họ dễ đọc, tuy nhiên sự thật đôi khi nó chỉ dễ đối với họ thôi. Vì thế khi bạn trao đổi với người phỏng vấn, họ sẽ hiểu rõ cũng như có thiện cảm với bạn.
Mặc khác, người phỏng vấn sẽ đưa ra hint và gợi ý giúp bạn. Nghe có vẻ khó tin đúng không nhưng thật sự là phần lớn người phỏng vấn luôn muốn bạn thành công. Vì thế mà thỉnh thoảng họ sẽ đưa ra tip khi bạn bị bí. Do vậy mà nếu bạn chịu khó giao tiếp thì họ sẽ hiểu được tiến độ cũng như khả năng của bạn. Tuy nhiên, một lập trình viên im lặng sẽ không thể nào có cơ hội cải thiện sửa chữa sau 20 phút cặm cụi làm.
Việc vừa giao tiếp vừa code còn giúp bạn biết được mình đang làm gì. Bởi đôi khi chúng ta vì bị tinh thần chưa vững nên khi bị mắc kẹt dễ gây mất bình tĩnh. Thế nên nói chuyện giao tiếp sẽ giúp bản thân chính bạn hiểu thêm về vấn đề cũng nhưng phương hướng của mình.
Lời kết
Hãy luôn nhớ rằng người phỏng vấn sẽ copy code của bạn và gửi lên cho sếp xem. Vì thế mà cách bạn viết code rất quan trọng, mang tính quyết định cho kết quả của buổi phỏng vấn.
Sau vài tuần làm quen với React Native, tôi đã thành công viết ra một app mobile cho mình. Và nó thật ra rất là đơn giản, chỉ phải mất vài ngày mà lại khá là vui.
App ứng dụng dành cho blog về đồ ăn yêu thích của tôi, Smitten Kitchen.
Ứng dụng cho phép người dùng tìm kiếm thông tin từ hơn 1,000 công thức, cũng như hiển thị các nguyên liệu và cách thức thực hiện món ăn.
User cũng có khả năng bookmark các công thức mà họ thích và chia sẻ chúng với bạn bè và người thân
Xin lưu ý rằng tôi chỉ sẽ tung ra ứng dụng này nếu được sự chấp thuận của blog, còn hiện giờ thì mã nguồn của nó sẽ vẫn được giữ kín.
React Native sẽ còn làm mưa gió một thời gian nữa
Một điều thường thấy ở các developer là họ rất ngại phải đầu tư thời gian học một ngôn ngữ lập trình mới nếu họ thấy rằng nó có khả năng cao trở nên lạc hậu trong tương lai.
Tuy vậy với React Native, mặc dù tôi chỉ mới tiếp xúc sơ thôi nhưng quả thật nó là một tool cực kì mạnh mẽ. Và tôi tin rằng React Native vẫn sẽ sống khỏe thêm một thời gian nữa.
Facebook, Instagram, và Airbnb đều dùng React Native để cho ra những version mobile app mới nhất của họ. Ngoài ra còn có một list dài bao gồm các app nổi tiếng cũng sử dụng React Native.
Jeff Meyerson, nhà sáng lập của Software Engineering Daily, cũng nói khá chi tiết về React Native platform. Ông tin rằng nó sẽ vẫn tiếp tục phát triển và được dùng rộng rãi bởi phần lớn các app thuộc mobile ecosystem.
Jeff còn cho rằng Facebook sẽ tung ra smartphone của riêng họ, với các app hỗ trợ được tạo bởi React Native.
React Native khác gì so với các cross-platform tool khác
Nếu như bạn chỉ mới biết đến React Native, nó là một open source project được tạo ra bởi Facebook. React Native cho phép developer tạo ra các cross-platform mobile app sử dụng JavaScript. Nó khá là giống so với React, một JavaScript library khá nổi tiếng của Facebook dành cho tạo ra web application.
Tôi vốn dĩ luôn khá là có ác cảm với những tool được quảng cáo là dành cho cross-platform mobile. Bởi kết quả thường xuyên nhận được luôn là nỗi thất vọng.
React Native không như các mobile app development framework khác như Ionic hoặc Cordova bởi nó compile code của bạn thành các dòng code native dành cho OS (Andord hoặc iOS).
Do đó mà bạn có thể tạo ra một app có độ phức tạp cao mà lại không thua kém gì so với các app tạo ra bởi các ngôn ngữ Swift/Objective-C hoặc Java.
Tuy vậy, ta vẫn phải hiểu và phân biết được sự khác nhau giữa các platform đó. Đồng thời trải nghiệm sử dụng của người dùng trên Android và iOS là hoàn toàn khác nhau nên bạn cần phải có khả năng tạo ra app chạy được trơn tru trên cả 2 platform.
Ngoài ra, nếu có tính năng bạn muốn thêm vào những tính năng mới những chưa có sự hỗ trợ từ React Native library, React Native giúp bạn tự viết ra Native Module phù hợp cho tính năng mới, và kết nối nó tới React Native codebase.
Bắt đầu từ đâu
Theo tôi, Udemy là một khởi đầu tuyệt vời. Giúp bạn hiểu thêm về react và redux cũng như làm quen với setup.
Ngoài ra, Facebook cũng vừa mới công bố Create React Native App, giúp cho quá trình setup ban đầu càng dễ dàng hơn.
Còn nếu bạn đã quen với React, thì giờ cứ nhảy thẳng vào đây. Mặc dù bạn sẽ phải bỏ ra $10, nhưng khóa học này thật sự rất hữu ích, giúp bạn tạo ra 4 loại mobile app khác nhau cũng như cung cấp component có thể tái sử dụng cho các project trong tương lai.
Udemy còn có khóa học chuyên sâu Advanced React Native Concepts, dành cho những developer muốn nâng cao tay nghề mình thêm.
Styling trong React Native
Bạn sẽ mất một thời gian để làm quen với Styling của React Native. Bởi nó sử dụng CSS flexbox. Điều mà tôi vẫn chưa thể cảm thấy thoải mái, dù bản thân vốn xuất thân từ bên lập trình cho web.
Thật may là có khá nhiều nguồn hữu ích giúp cho việc học về flexbox trở nên dễ dàng hơn như:
Ngoài ra còn có cả trò chơi để bạn thực hành: Flexbox Froggy
Sau vài tuần học về React native, tôi giờ đã hiểu rõ hơn về flexbox.
Cách tốt nhất để hiểu rõ thêm về Styling là tạo ra style object cho từng component. , sau đó áp dụng nó với inline-style. Nên nhớ rằng bạn không thực sự làm về CSS, do đó việc đặt tên cho properties sẽ có khác đi một chút.
Một điểm khác biệt quan trọng nữa là bạn không thể sử dụng HTML tags trong Javascript, bởi vì bạn đang lập trinh cho một app chạy trên phone chứ không phải cho trình duyệt web. Thay vào đó, các component được tạo ra từ một set các component cung cấp bởi React Native library.
Bạn sẽ mất một thời gian để làm quen, nhưng tin tôi đi, đến khi bạn kịp nhận ra thì nó đã hình thành trong vô thức sử dụng<View></View> tag thay vì <div></div> trong project web app tiếp theo của mình.
React Router được xem như lựa chọn chuẩn về library của cộng đồng React, tuy vẫn còn nhiều library cũng hỗ trợ cho ngôn ngữ này.
Riêng tôi thì React Native Router Flux library khá là tuyệt vời và tôi luôn dùng nó cho các project của mình. Tuy nhiên, library này lại không thích hợp cho các project lớn và phức tạp.
May thay, React Native đã có một cộng đồng khá lớn. Các phiên bản cập nhật luôn được tung ra hàng tháng nên tôi nghĩ những vấn đề trên sẽ không làm khó bạn.
Trải nghiệm cũng rất quan trọng
Quả thật tính năng chia sẻ code giữa Andriod và iOS app của React Native là một điểm mạnh và thu hút nhiều developer. Tuy nhiên nó chỉ là một phần làm nên sự nổi bật của ngôn ngữ lập trình.
Điều tôi yêu thích nhất ở React Native là khả năng reload ngay lập tức. Vốn đã từng dùng Andriod Studio, và phải chờ từ 30 cho đến 60 giây cho mỗi lần reload như vậy
Nói cách khác, React Native thật sự khiến bạn hăng sai code và đó là quá đủ để cho bạn dùng thử ngôn ngữ lập trình tuyệt vời này.
Hãy luôn ham tìm tòi và khám phá
React Native là một minh chứng cho việc ta có thể áp dụng một ý tưởng vốn đã thành công (web) vào một lĩnh vực khác (mobile) mà vẫn có được kết quả tương tự.
Cũng như Haseeb Quereshi đã tuyên bố trong buổi diễn thuyết về convergence, là một kỹ sư phần mềm, ta luôn nên tìm cách hội tụ và tạo ra một nguyên tắc, ngôn ngữ, tool mà dùng được cho nhiều lĩnh vực và trường hợp khác nhau.
Hãy tập trung vào một giải pháp thật tối ưu.
“Hãy giữ cho cái tôi của bạn nhỏ thôi” – Paul Graham
Đôi khi chúng ta trở nên quá lý thuyết và giáo điều, khiến cho đánh mất đi cái nhìn sâu sắc về mọi thứ xung quanh.
Vì thế hãy luôn tìm hiểu.
Nếu bạn thử xài React Native thì tôi tin rằng bạn sẽ nhận ra sự tuyệt vời của ngôn ngữ này.
Lãnh đạo tại Google cho dù muốn cũng không thể nào thăng chức cho nhân viên dưới quyền, họ thậm chí còn chẳng thể tuyển dụng thêm người mới cho nhóm của mình. Tất cả đều phụ thuộc vào một thứ mang tên packet.
Làm một quản lý ở Google hơi khác một chút so với ở những nơi khác.
Theo Kim Scott – tác giả của cuốn sách ‘Radical Candor: Be a Kickass Boss Without Losing Your Humanity’, thì lý do là vì mọi quyết định ở công ty này được đưa ra dựa vào sự nhất trí của mọi người.
Scott đã từng lãnh đạo bộ phận Adsense và YouTube ở Google. Và trong một cuộc phỏng vấn ở Hội nghị Qualtrics Insight Summit gần đây, Scott đã cung cấp một chút thông tin về việc nắm giữ cương vị quản lý ở Google thì như thế nào.
“Về cơ bản, Google tước bỏ gần như mọi quyền lực và quyền kiểm soát mà một quản lý có được ở các công ty khác”, bà giải thích. “Nếu bạn là quản lý ở Google, bạn không được đơn phương lựa chọn người mình muốn tuyển dụng hoặc sa thải. Bạn không được chọn điểm số đánh giá cho từng người, yếu tố quyết định số tiền thưởng mà họ nhận được”.
Vậy những quyết định này được đưa ra như thế nào? Theo Scott, “một nhóm người sẽ phỏng vấn một ứng viên và viết một bản đánh giá nhỏ gọi là ‘packet’, đưa ra ý kiến của mình và cho biết có nên tuyển dụng người này hay không”. Nhóm người tiến hành phỏng vấn này sẽ gồm cả quản lý, nhân viên và đồng nghiệp tương lai của ứng viên. Bản thân Scott cũng được phỏng vấn bởi một số người sẽ làm việc chung với cô nếu được tuyển dụng.
Khi quán trình phỏng vấn kết thúc, các ‘packet’ sẽ được chuyển đến một ủy ban. “Giám đốc nhân sự không được quyết định tuyển dụng ứng viên”, Scott cho biết. “Họ có thể cố gắng để đưa một ứng viên vào đội của mình, nhưng người đó có quyền chọn làm cho một đội khác”.
Các quản lý ở Google cũng không thể ngăn cản bất kỳ ai luân chuyển sang một bộ phận khác trong nội bộ công ty. Trên thực tế, điều này cũng xảy ra với Scott. “Khi gia nhập Google. Tôi có 5 cấp dưới. Trong tuần đầu tiên, 3 người trong số đó đã quyết định nhận việc khác ở Google”.
Các quản lý thậm chí còn có ít quyền lực hơn trong việc thăng chức cho các nhân viên.
“Đặc biệt là trong lĩnh vực kỹ thuật, chuyện này rất thú vị”, Scott chia sẻ. “Một nhân viên sẽ giơ tay lên và nói, ‘Tôi đã sẵn sàng để được thăng chức’. Quản lý có thể đưa ra lời khuyên, nhưng ngay cả khi người quản lý nói ‘Tôi nghĩ bạn chưa sẵn sàng đâu’ thì người kia vẫn có thể nhận được các packet đánh giá. Việc được thăng chức sẽ khó hơn nếu không có sự giúp đỡ của người quản lý, nhưng bạn vẫn có thể thành công”.
Hoặc nếu người quản lý chấp thuận việc thăng chức, họ có thể giúp nhân viên chuẩn bị một packet hoặc thu thập lời tiến cử từ những người khác ủng hộ cho việc thăng chức. “Packet đó cũng được gửi tới một ủy ban”, Scott nói. “Người quản lý của nhân viên kia không được nằm trong ủy ban, và ủy ban này sẽ đưa ra quyết định cuối cùng”.
Theo Scott, việc này nghe có vẻ phức tạp nhưng lại rất rốt cho Google. Vì nhờ có quy trình sử dụng ‘packet’ như thế nên “có rất ít chuyện bất công trong việc thăng chức”.
Không những thế, quan hệ công việc trong toàn công ty cũng trở nên tốt hơn. “Để trở thành một quản lý hiệu quả, bạn cần phải có các mối quan hệ tốt”, bà nói. “Loại bỏ quyền lực đơn phương của các quản lý giúp cho các mối quan hệ tốt tồn tại được. Không gì tệ hơn cho một mối quan hệ bằng sự bất cân xứng về quyền lực”.
Có thể phương thức này sẽ không có tác dụng với mọi công ty và mọi đối tượng nhân viên. Nhưng có một bài học ở đây dành cho mọi nhân viên quản lý. Đó là: Càng nhiều quyết định được đồng thuận, thì các mối quan hệ càng trở nên tốt hơn, và các nhân viên càng trở nên gắn kết với nhau hơn.
Nhờ vào việc sự dụng inline style, chúng ta có thể lập trình và tận dụng gần như tất cả tiềm năng của Javascript. Đặc biệt là các lợi ích từ CSS pre-processor (variables, mixins, và functions). Đồng thời, nhiều vấn đề phát sinh từ CSS cũng được giải quyết, như xung đột trong style cũng như namespacing.
Để hiểu thêm về vấn đề của CSS trong JavaScript được giải quyết như thế nào, bạn hãy vào xem React CSS in JS. Còn nếu bạn muốn hiểu thêm về việc cải thiện hiệu năng nhờ vào Aphrodite, bạn có thể đọc tại Inline CSS at Khan Academy: Aphrodite. Ngoài ra, Airbnb’s styleguide cũng là một nguồn khá hữu ích cho những bạn muốn biết về CSS trong Javascript.
Hãy bắt đầu với một ví dụ đơn giản: tạo và thiết kế một nút bấm (button)
Thông thường các component và style được để chung vào một file: Button và ButtonStyles. Đó là vì cả 2 đều có chung trong một mục đích: tạo tính thẩm mĩ. tuy nhiên trong bài viết này, tôi sẽ chia code thành nhiều phần khác nhau cho dễ “tiêu hóa”
Không có gì cao siêu cả – chỉ là một stateless React component, bởi Aphrodite thật sự phát huy được năng lực của mình khi trong property className . Lúc đó function css sẽ chuyển đổi styles object vào trong CSS. styles vốn được tạo ra nhờ vào function StyleSheet.create({ ... }) thuộc Aphrodite. Bạn có thể thấy kết quả từ StyleSheet.create({ ... }) nhờ vào Aphrodite playground.
Một trong những lợi thế của Aphrodite đó là sự chuyển đổi trực tiếp cũng như nó khá dễ học, không quá khó. Các property như border-radius sẽ trở thành borderRadius và value sẽ được biến thành string. Pseudo-selectors, media queries, và thông tin về font chữ đều có thể làm được. Ngoài ra, vendor prefixes cũng được tự động thêm vào.
Sau đây là kết quả:
Với ví dụ này, giờ chúng ta hãy suy nghĩ cách dùng Aphrodite để tạo nên một visual design system đơn giản, chỉ tập trung vào 2 yếu cơ bản là: typography và spacing.
Yếu tố cơ bản thứ nhất – typography
Typography là một trong những ý tố cơ bản nhất của design. Thế nên, điều đầu tiên ta cần làm là xác định typography thông qua hằng số. Và vì không như Sass hoặc Less, hằng số của Aphrodite có thể đặt trong JavaScript hoặc JSON file.
Xác định hằng số của typography
Khi tạo ra hằng số, hãy đặt tên cho các variable theo chức năng của chúng. Thay vì đặt tên cho một font size của bạn là h2, hãy dùng displayLarge để miêu tả vai trò của nó. tương tự, với độ đậm nhạt của font, thay vì dùng 600, thì hãy ghi là semibold để ám chỉ hiệu ứng của nó.
Rất là quan trọng trong việc xác định được chính xác value cho các variable như kích cỡ chữ hay độ đậm nhạt của nó. Đó là bởi vì nó ảnh hưởng đến tính mĩ thuật cũng như vertical rhythm trong thiết kế. Vertical rhythm là một thuật ngữ ám chỉ việc spacing thích hợp.
Việc chọn độ cao cho dòng chữ cũng như kích thước của front đều có cách thực hiện riêng của nó. Chúng ta có thể sử dụng tỉ lệ trong số học để đưa ra các set cặp kích thước thích hợp và có tiềm năng. Khoảng một tuần trước, tôi đã có một bài viết rất chi tiết về vấn đề trên: Typography can make or break your design: a process for choosing type. Để chọn được front với kích cỡ vừa ý, bạn nên sử dụng Modular Scale. Với việc xác định độ cao cho dòng chữ thì vertical rhythm calculator là một lựa chọn tuyệt vời.
Xác định những thành phần làm nên một Headline
Sau khi đã chọn ra typography mà bạn thích nhất, bước tiếp theo sẽ là tạo nên một component để sử dụng chúng. Mục đích của component này là nhằm giữa sự nhất quán trong thiết kế cũng như cách áp dụng cho heading xuyên suốt codebase.
Có thể thấy, component `Heading` là một stateless function với chức năng chấp nhận tag như là một phần của nó cũng như chuyển đổi tag đó với style tương thích. Điều này thực hiện được là nhờ vào việc chúng ta đã xác định tag mapping từ trước đó.
Như vậy, Heading component của ta sẽ trông như dưới đây
function Parent() {
return (
<Heading tag="h2">Hello World</Heading>
);
}
Với phương pháp trên, ta sẽ hạn chế được sự xuất hiện variability trong hệ thống type. Nhờ đó mà tránh được cái bẫy của hàng trăm kích cỡ chữ khác nhau bởi ta đã tiêu chuẩn hóa heading cho cả data base. Hơn nữa, Heading component cũng có thể áp dụng được vào Text component dành cho body copy.
Yếu tố cơ bản thứ hai – Spacing
Khi lựa chọn về spacing giữa các yếu tố, chúng ta có thể dựa vào số học. Nhờ vào spacingFactor , ta có thể tạo ra các set khoảng cách cho spacing đựa vào một điểm chung. Phương pháp trên bảo đảm tính nhất quán và logic trong spacing.
Có thể thấy, ví dụ ở trên đều sử dụng một tỉ lệ chung, từ dòng 1 đến 13. Tuy nhiên, bạn cứ việc mà thử nghiệm với các tỉ lệ khác nhau. Bởi thiết kế luôn đòi hỏi việc sử dụng các kích cỡ khác nhau dựa trên mục đích, người xem, và thiết bị mà họ nhắm tới. Sau đây là một ví dụ với khoảng cách spacing dựa trên tỉ lệ vàng với spacingFactor của 8.
Golden Ratio (1:1.618)
8.0 x (1.618 ^ 0) = 8.000
8.0 x (1.618 ^ 1) = 12.94
8.0 x (1.618 ^ 2) = 20.94
8.0 x (1.618 ^ 3) = 33.89
8.0 x (1.618 ^ 4) = 54.82
8.0 x (1.618 ^ 5) = 88.71
Dưới đây thể hiện spacing scale sẽ như thế nào trong code. Tôi cũng thêm vào helper function nhằm xử lí việc tính toán cũng như làm tròn kết quả.
Có thể thấy rằng nó sẽ luôn hoạt động trong mọi trường hợp. Tuy nhiên, nếu ta muốn thay đổi marginBottom property của Button tùy vào vị trí của nó thì phải làm sao?
Một cách để thực hiện là ta chèn lên style cũ một style mới từ component parent. Tuy vậy, nó có thể khá rắc rối thế nên một phương thức khác tối ưu hơn là tạo ra Spacing component để quản lí những thay đổi trong spacing của các yếu tố trong database.
import React, { PropTypes } from 'react';
import { spacing } from '../../base/spacing';
function getSpacingSize(size) {
return `space${size}`;
}
function Spacing(props) {
return (
<div style={{ marginBottom: spacing[getSpacingSize(props.size)] }}>
{props.children}
</div>
);
}
export default Spacing;
Nhờ đó mà ta không phải lo về tỉ lệ cũng như setting của spacing giữa các component với nhau. Nói cách khác, các component “con” sẽ trở thành các thành phần độc lập và không yêu cầu ta phải biết về vị trí đặt nó ở đầu nhằm tương thính với các yếu tố khác.
Nguyên nhân là do các component như buttons, inputs, và cards luôn cần có sự khác nhau về kích cỡ cũng như spacing. Bởi button trong một bài viết sẽ có kích thước khác với button nằm ở navigation bar. Như vậy, nếu một component luôn cần có sự nhất quán trong các kích thước khác nhau thì là lẽ hiển nhiên khi ta chỉ cần tập trung quản lí chúng thay vì là các component.
Bạn hẳn cũng nhận ra, trong ví dụ trên chỉ sử dụng marginBottom. Đó là vì nếu ta xác định tất cả margin theo một hướng nhất định sẽ giúp tránh việc bị crash do không tương thích giữa các margin cũng như việc thiết kế được thuận tiện hơn. Bạn có thể tìm hiểu thêm thông qua bài viết của Harry Robert: Single-direction margin declarations.
Thêm nữa, bạn đã có thể sử dụng spacing mà bạn đã xác định trước đó như là padding.
Nhờ đó mà thiết kế của bạn sẽ trở nên nhất quán hơn.
Sau đây là thành quả của chúng ta
Giờ thì bạn đã hiểu thêm về CSS trong Javascript rồi đấy, hãy thử vọc và thí nghiệm đi. Áp dụng inline JavaScript styles vào project tiếp theo của bạn là một ý tưởng không tồi. Tôi tin rằng bạn sẽ cảm thấy khá tuyệt nếu có thể tự mình giải quyết được những vấn đề liên quan về styling và thẩm mĩ.