Điểm xuất phát
Tôi – đã gần 4 năm từ lúc tốt nghiệp chuyên ngành CNTT của một trường Cao Đẳng thường thường bậc trung – đang quanh quẩn ở một công ty nghiên cứu thị trường, với một mức lương đủ sống. Đó là một công việc ổn định nhưng nhàm chán, không học hỏi được nhiều từ công việc, một phần cũng bởi nó không liên quan nhiều đến chuyên ngành mình đã học, phần còn lại là bởi công việc cứ lặp đi lặp lại, và khối lượng công việc rất nhiều khiến mình cảm thấy bị áp lực kinh khủng. 4 năm tuy ngắn nhưng thực dài.
Chịu đựng như vậy là đã đủ, tôi quyết định là mình cần can đảm bước ra khỏi vòng tròn thoải mái của mình, quyết định dành cho bản thân mình một cơ hội, được làm những gì mình thích. Nếu không phải bây giờ, vậy thì là bao giờ? (Nếu không phải là tôi, thì là ai?)
Tôi thiết tha được trở lại với Lập trình Web nhưng ngại phải bắt đầu từ con số không (Hay con số âm nhỉ?) – Những kiến thức tích lũy về PHP, HTML, CSS, JavaScript, ASP.NET, Database… lâu không dùng nên đã bay biến. Tôi có hơi già để bắt đầu lại chăng? Tôi không muốn mình mắc kẹt ở sự trung bình, trung bình về mọi mặt… Và Tôi biết công việc hiện tại sẽ không đưa tôi đi đến đâu cả, bởi vì tôi không hoàn toàn yêu thích nó, có chăng chỉ là cố tìm những niềm vui nho nhỏ trong công việc thường ngày. Và ngày qua ngày, tôi thấy mình càng trở nên thiếu trách nhiệm với công việc hiện tại: tôi thường xuyên bị xao nhãng, thiếu tập trung, mắc lỗi ngày càng nhiều hơn, cáu gắt hơn, nóng nảy hơn… thỉnh thoảng, tôi tự thấy mình chỉ ráng làm qua loa cho xong việc. Tôi thấy mình ngày càng trở thành con người mà tôi không muốn trở thành… Tôi đang làm gì thế này? Ta đã làm chi đời ta? (Tiêu đề bài tản văn của Phạm Lữ Ân trong quyển “Nếu biết trăm năm là hữu hạn” cứ ám ảnh tôi mãi. – http://www.toitaigioibancungthe.vn/miennam/ta-se-lam-chi-doi-ta/ )
Và Tôi bắt đầu như thế nào
Sau khi xong công tác tư tưởng, bây giờ là lúc bước những bước đầu tiên đây.
- Đăng ký học một khóa ngắn hạn về Ruby ở Pingo (Ruby ở Việt Nam không có mấy người thành thạo, vậy nên, không có gì lạ khi hầu như không có khóa đào tạo nào về Ruby trong thị trường Việt Nam) – Sau khi tìm kiếm thì chỉ có 1 Website dạy online (Với học phí 600k – ChickenRain.com – vừa bị đóng cửa) và Pingo Education – một trung tâm dạy lập trình mới mở, liên kết với đại học Bách Khoa TPHCM. Anh Quý và anh Quang cũng rất nhiệt tình và có nhiều kinh nghiệm về Ruby, tiếc là cách tiếp cận mà Pingo đưa ra cho học viên không phù hợp với mình nên đi học được vài buổi là mình bỏ ngang và quyết định tự học ở nhà, chậm rãi mà chắc chắn hơn. Nhưng cũng cảm ơn Pingo đã cho mình những bài học đầu tiên, giúp mình có phương hướng để chinh phục đỉnh núi cao trước mặt. Không có Pingo thì mình xuất phát như thế nào đây.
- Dọn sạch 1 ổ cứng trong Laptop (Và mất sạch dữ liệu của một ổ khác – Do bất cẩn). Cài Ubuntu chạy song song với Windows (Ruby vẫn hoạt động được trên Windows). Trang bị cho mình 1 số lệnh cơ bản trong Linux (chủ yếu liên quan đến cdụngài đặt và vận hành: apt-get, ls, cd, alias, mkdir, rm, mv…), cài đặt Ruby và các ứng dụng cần thiết. (Thích Sublime Text ghê)
- Tìm hiểu cơ bản về Git và đăng ký tài khoản trên Github – Git là Source Control rất được cộng đồng Ruby ưa chuộng. Trước đây mình đã có kinh nghiệm dùng SVN khi làm đồ án tốt nghiệp nhưng Git có cách hoạt động và khái niệm khác nhiều với SVN, tiên tiến hơn.
- Đọc các bài viết chia sẻ kinh nghiệm về việc học Ruby và ngộ ra “Đừng học Rails trước khi học Ruby” (Pingo lướt qua Ruby trong 2 chương) – Và chỉ nên học Rails sau Sinatra. Bởi vì Rails hỗ trợ Developer rất nhiều, bản thân nó có khá nhiều nguyên tắc (convention), mà bạn chỉ cần áp dụng rập khuôn là có thể tạo được một ứng dụng Website hoàn chỉnh trong thời gian rất ngắn (Đặc biệt là nếu Ứng dụng Web của bạn chỉ có các thao tác CRUD). Nhưng, nếu chỉ rập khuôn như vậy mãi thì cuối cùng bạn sẽ chẳng hiểu gì về Ruby on Rails. Trong Rails, muốn thay đổi một vài thứ để phù hợp với yêu cầu của mình thì bạn sẽ gặp nhiều khó khăn nếu bạn không hiểu cách làm việc của nó. Và, mình đã chọn cách tiếp cận Lập trình Web với Ruby bằng hướng này.
Chuẩn bị tài liệu:
- The Well-grounded Rubyist (Mình đã tận dụng máy in của Công ty để in ra và đóng thành cuốn nhưng chưa đọc) – Tham khảo các Trang Review thì thấy hầu hết đều đánh giá quyển này rất cao. Nó là một quyển sách đầy đủ, thích hợp để reference khi cần thiết.
- Beginning Rails 4 – Được Pingo dùng để dạy Rails, nhưng tạm thời mình sẽ không đọc nó, để dành khi cần chuyển qua Rails đã.
- Learn Ruby the Hard Way – Rất hay, phù hợp cho những người mới bắt đầu với Ruby – Học bằng cách thực hành từng ví dụ và những bài tập mà Tác giả Sách đưa ra. Mình đã đọc cái này trước tiên, sau khi thấy ngán ngẩm với The Well-grounded Rubyist vì nó quá dày.
- Complete bài học trên TryRuby.org trong khoảng 30p – Một khóa ngắn hạn, miễn phí về Ruby của CodeSchool – Cái này mình dùng để ôn lại một số khái niệm cơ bản trong Ruby (về String, Array, Hash, File, Class…), sau khi đã hoàn tất 1 tuần học và hành với LRbHW. (Sau khi hoàn thành TryRuby thì nó sẽ đề nghị mình chuyển sang Rails for Zombies – cũng miễn phí và một số khóa học có phí khác – Nếu bạn chưa quan tâm đến Rails thì bỏ qua trang này và trở lại khi khác.
- Trong LRbHW – những Exercise cuối cho mình bước đầu tiếp cận đến Sinatra. Mình thích cái tên Sinatra, Biểu tượng Sinatra và câu Slogan “Singing in the Rain with Sinatra”. Sinatra đã thu hút mình, và qua bước đầu tìm hiểu, nó đơn giản và nhỏ gọn hơn Rails. «< Đây là thứ mình cần và mình sẽ tìm hiểu tiếp theo.
- Thực hành Tutorial “Singing with Sinatra” trên Tutplus: Ngắn gọn, chỉ gồm 3 phần – Phần 1 – Làm quen với Sinatra, Phần 2 – Viết một Web To do list đơn giản bằng Ruby và Sinatra, với CRUD bằng DataMapper (Tương tự ActiveRecord trong Rails), Phần 3 – Hoàn thiện Web To do list trên với các chức năng như là Escape HTML, SQL Injection, Xây dựng RSS Feed, Thông báo lỗi với Sinatra Flash… Đây thực sự là một trang tốt để bắt đầu với Sinatra. Singing with Sinatra – Tuts+ Code Tutorial
Khi tìm Blog chia sẻ kinh nghiệm học Ruby trên Internet thì tình cờ lạc vào trang của Kylembrown. Mình thấy cách tiếp cận của anh ta hợp với phương hướng tiếp cận của mình: Sau khi thực hành xong App Recall của TutPlus, Kylem sử dụng Bootstrap, Git cho App Recall và cuối cùng là commit nó lên Heroku. Việc deploy ứng dụng lên Internet (Heroku – Hosting khá nổi tiếng trong cộng đồng Ruby, có cung cấp gói miễn phí cho Developer) là một động lực không nhỏ để bạn bước tiếp con đường đầy thử thách phía trước.
Một ngày đau đầu với Heroku – Sau khi đưa Workless vào góp phần làm cho cái App Recall này trở nên xấu hơn, thực hành sử dụng Git, Push lên Repository của mình trên Github, mình đã deploy nó lên Heroku. Thật đau đầu, đụng hết từ lỗi này đến lỗi khác, từ lỗi trong Code, đến lỗi trong việc Configure App để Heroku hiểu. Hết ErrorCode H14, H20 rồi đến H10, liên tục commit, push rồi lại xem Logs để tìm lỗi… Rồi đi từ phát hiện này đến phát hiện khác.
Tham khảo Error Code – https://devcenter.heroku.com/articles/error-codes
Tham khảo Getting Started with Ruby on Heroku – https://devcenter.heroku.com/articles/getting-started-with-ruby#introduction
Heroku with Postgresql – https://devcenter.heroku.com/articles/heroku-postgresql
Trước tiên là Gemfile và Gemfile.lock, Heroku yêu cầu phải có 2 file này, thế là phải dùng đến Bundle (Bundle init và Bundle Install), nhờ vậy mà biết thêm cách quản lý Gem.
Tiếp theo là File Config.ru, File Procfile.
Heroku không dùng Sqlite, thế là lại phải cài đặt Postgresql vào Ubuntu (Postgresql, Postgresql-contrib, Postgresql-dev – cần thiết nếu bạn muốn cài các Gem liên quan đến Postgresql vào Ruby) – Tham khảo thêm tại https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-14-04
Fix lỗi R10 khi chạy App Sinatra + Heroku – http://stackoverflow.com/questions/17036951/heroku-production-issues-with-sinatra-app-error-r10
Và … Finally, It works!!!
Cuối tháng 8/2014 –
Những ngày tiếp theo, trở lại với công việc thường ngày, một số dự án mình đang handle đến deadline nên mình đành gác lại việc học Ruby một thời gian để hoàn thành những dự án kia. (Nhưng có vẻ là càng ngày công việc Data Processing đó ngày càng chán đối với mình).
Tranh thủ thời gian này, cài một Blog cá nhân bằng Ruby, Sau một thời gian tìm hiểu thì quyết định dùng thử Octopress xem sao. Octopress sử dụng Markdown, vậy là mình phải đọc qua Syntax của Markdown một chút. Lại tiếp tục gặp rắc rối với việc Deploy lên Heroku nhưng nhờ việc đã từng có kinh nghiệm trước đó nên lần này đã giải quyết nhanh hơn, gặp ít lỗi hơn.
Sử dụng rvm, chuyển qua dùng Ruby 1.9.3 cho Application Folder Octopress.
rvm use 1.9.3
bundle install
Ngày 01/09/2014 – Nói chuyện với anh bạn mình, cũng đang là một Web Developer, mới biết, thế giới công nghệ tiến nhanh quá… Nghe nó giới thiệu về Node.JS, Angular.JS, thích mê… Nhưng mà thôi, mình cần tránh lan man, cứ lo học tốt Ruby, Sinatra và Rails đã… (Hiện còn nhiều kiến thức liên quan cần phải tìm hiểu quá: CoffeeScript, SCSS, Slim, HAML, Unit Test, Debug, PostgreSQL, MongoDB, Bootstrap..)
Đã luyện xong quyển Jump Start Sinatra rồi, giờ bắt tay vào làm một dự án thực tế cho công ty để ứng dụng những kiến thức đã tiếp nạp thôi.
Ngày 11/09/2014 – Sau 10 ngày mà dự án mình làm vẫn chưa hoàn thành, những phần râu ria thì ok rồi. Vì làm đến đâu tìm hiểu đến đó nên tiến độ có vẻ chậm – Giờ còn một hai phần xương xẩu nhất thôi.
Ngày 11/11/2014 – Sau 3 tháng học Ruby, mình đã có một quyết định là xin một công việc về Ruby on Rails để toàn tâm toàn ý cho sự học. TGM đăng tuyển, thế là mình đã chớp lấy cơ hội, dù thực ra thời điểm đó mình chỉ mới học Ruby được 2 tháng, học về Sinatra chứ không hề biết tí gì về Rails.
Update thêm một số bài viết tìm được trên Blog về Ruby
http://astonj.com/tech/whats-special-about-ruby/
http://astonj.com/tech/whats-so-special-about-ruby-on-rails/
http://astonj.com/tech/rails-is-easy-to-learn/
http://astonj.com/tech/best-way-to-learn-ruby-rails/
http://astonj.com/tech/advanced-ruby-rails-books/
http://astonj.com/life/best-way-to-learnreadstudy/
RailsCast, ASCIICasts, GoRails
http://www.codecademy.com/tracks/ruby
List các bài viết hay này được bổ sung rất nhiều trong quá trình tìm hiểu Ruby on Rails, mình đã bookmark lại bằng Google Chrome và RedNotebook, sẽ chọn lọc và cập nhật danh sách này sau nhé
Tóm tắt
- [X] Cài đặt Linux, học một số lệnh command line cơ bản, cài đặt Software, Ruby với rvm, cài đặt gem …
- [X] Learn Ruby the Hard way
- [X] TryRuby.org – Free Course
- [X] Singing with Sinatra
- [X] Jump Start Sinatra
- [X] Learning Git – https://try.github.io/levels/1/challenges/1 , http://pcottle.github.io/learnGitBranching/
- [X] Code a Simple Project using Sinatra (Boostraps, jQuery and …)
- [X] Rails for Zombies – Free Course
- [X] Ruby on Rails Tutorial by Michael Hartl – https://www.railstutorial.org/
- [X] Học cách sử dụng một số gem thông dụng trên Rails như Devise, cancancan…
- [X] W3schools.com – AngularJS, Bootstrap, Ajax, HTML 5, CSS 3, jQuery, JavaScript…
- [X] Ebook AngularJS + Rails (Mua mất 25$ ^^)
- [X] Using Google Chrome Dev Tools (or Firefox Firebug, Firefox Web Dev Tools)
https://www.codeschool.com/courses/discover-devtools
- Liên kết đến một bài viết khác của Tôi – những dòng cảm xúc đọng lại sau buổi học đầu tiên về Ruby ở Pingo. Begin Again.
- Những Story khác của những người đã và đang học RoR – Những người đã phần nào truyền cảm hứng cho tôi, đã phần nào giúp tôi định hướng rõ ràng hơn cho bản thân mình, Cảm ơn.
- Learning Ruby on Rails – Kylembrown.com
- How I TRAINed to learn Rails – On Medium.com
- Hy vọng là Video này sẽ giúp tiếp thêm động lực cho bạn. https://www.youtube.com/watch?v=WVmTqqnnams
- Link Chatroom của Cộng động Ruby Việt Nam – Vietnamrb on Slack