2010-03-11 23 views
5

Tôi đến từ một nền tảng C, php và bash, thật dễ dàng để tìm hiểu bởi vì tất cả đều có cùng cấu trúc C, mà tôi có thể kết hợp với những gì tôi đã biết.Làm thế nào để lập trình viên C và PHP này có thể học Ruby và Rails?

Sau đó 2 năm trước, tôi đã học được Python và tôi đã học được nó khá tốt, Python dễ dàng hơn cho tôi để tìm hiểu hơn Ruby. Sau đó, kể từ năm ngoái, tôi đã cố gắng tìm hiểu Ruby, sau đó là Rails, và tôi thừa nhận, cho đến bây giờ tôi vẫn không thể hiểu được, sự trớ trêu là những thứ được đánh giá là dễ học, nhưng đối với một lập trình viên dày dặn như tôi, tôi không thể kết hợp nó với những gì tôi đã học trước đây, tôi có 2 cuốn sách trên cả Ruby và Rails, và khi tôi đọc nó không có gì được hấp thu vào tâm trí của tôi, và tôi gần như từ bỏ ...

Trong ruby, tôi gặp khó khăn trong việc nắm bắt các khái niệm về các khối, và tại sao có các biến @variables có thể được truy cập bởi các hàm khác, và biến $ và biến là gì? Và trong Rails, tại sao có hàm như this_is_another_function_that_do_this, do đó, ruby, nó chỉ là một quy ước đặt tên hoặc nó được tạo tự động với thiscaniable _can_do_this_function. Tôi vẫn còn bối rối rằng tất cả những khái niệm ma thuật và sự vật đó đến từ đâu? Và bây giờ, 1 năm cố gắng và hấp thụ, nhưng vẫn không có tiến bộ ...

Edit: Để tóm tắt:

  1. Làm thế nào tôi có thể tìm hiểu về các khối, và làm thế nào nó có thể liên quan đến các khái niệm từ PHP/C?
  2. biến, những gì hiện có nghĩa là khi một biến được bắt đầu bằng:
    • @
    • $
    • :
  3. "Magic khái niệm", suchs như đường ray tờ khai của Records, những gì xảy ra sau hậu trường khi tôi viết has_one X

OK vì vậy, hãy nhầm lẫn với tôi, ít nhất là tôi 'M trung thực với bản thân mình, và đó là hơn một năm nay kể từ khi lần đầu tiên tôi cố gắng tìm hiểu ruby, và tôi không nhận trẻ ..

nên

I learned this in Bash/C/PHP 

solve_problem($problem) 
{ 
    if [ -e $problem == "trivial" ]; 
    then 
     write_solution(); 
    else 
     breakdown_problem_into_N_subproblems(\; 
     define_relationship_between_subproblems; 
     for i in $(command $each_subproblem); 
     do 
      solve_problem $i 
     done 
    fi 
} 

write_solution(problem) { 
    some_solution=$(command <parameters> "input" | command); 
    command | command $some_solution > output_solved_problem_to_file 
} 

breakdown_problem_into_N_subproblems($problems) { 
    for i in $problems; 
    do 
     command $i | command > i_can_output_a_file_right_away 
    done 
} 

define_relationship_between_subproblems($problems) { 
    if [ -e $problem == "relationship" ]; 
    then 
     relationship=$(command; command | command; command;) 
    elsif [ -e $problem == "another_relationship" ]; 
     relationship=$(command; command | command; command;) 
    fi 
} 


In C/PHP is something like this 

solve_problem(problem) 
{ 
    if (problem == trivial) write_solution; 
    else { 
     breakdown_problem_into_N_subproblems; 
     define_relationship_between_subproblems; 
     for (each_subproblem) solve_problems(subproblem); 
    } 
} 

Và bây giờ, tôi chỉ không thể kết nối các dấu chấm với Ruby, | b | {blocks}, sử dụng @variables,: variables và variables_with_this_things ..

Trả lời

6

Bạn nói rằng bạn đang đọc cuốn sách, vì vậy có lẽ là những gì bạn cần là:

đọc ít, viết thêm.

Tôi cũng từ nền C và nhiều khái niệm về ruby ​​hoàn toàn xa lạ đối với tôi và tôi vẫn không hiểu tất cả. Nhưng thay vì chỉ đọc tôi quyết định viết và bây giờ tôi có vài chương trình/tập lệnh và trang web (thậm chí khá lớn) và tôi thực sự yêu thích ruby. Khi bạn viết, bạn sẽ bắt đầu "cảm nhận" tất cả các khái niệm này. Sử dụng irb để kiểm tra những gì bạn đọc từ sách. Viết một số phương pháp với các khối ngay cả khi bạn không hiểu chúng và chơi với nó.

1

Có thể bạn nên chia sẻ một số mối quan tâm cụ thể thành các câu hỏi?

Ví dụ:

@variables là đối tượng biến chẳng hạn - giá trị là địa phương trường hợp cụ thể của một đối tượng và do đó thể truy cập từ tất cả các phương pháp.

1

Bạn thực sự nên đọc một cuốn sách phong nha về Ruby. Tốt nhất, cũng được coi là cuốn sách tham khảo trong cộng đồng Ruby là cuốn sách PickAxe: http://www.pragprog.com/titles/ruby3/programming-ruby-1-9

Đây là ấn bản thứ ba của Lập trình Ruby và bao gồm Ruby 1.9. Ấn bản thứ hai của cuốn sách bao gồm Ruby 1.8. Ấn bản đầu tiên bao gồm Ruby 1.6.Và ấn bản đầu tiên có sẵn trực tuyến miễn phí tại: http://www.ruby-doc.org/docs/ProgrammingRuby/

Đọc một cuốn sách như vậy sẽ dạy cho bạn những điều cơ bản. Có lẽ rất nhiều thứ bạn đã biết, nhưng vì bạn hỏi những thứ cơ bản như: biến (cái gì bắt đầu bằng ":" là chữ, không phải biến) và @variable, tôi thực sự khuyên bạn nên đọc một cuốn sách.

3

Ngoài các câu trả lời khác được đưa ra cho đến nay, bạn có thể muốn tìm hiểu về lập trình hướng đối tượng cơ bản. Khái niệm về "biến cá thể" là rất quan trọng trong một ngôn ngữ (như Ruby), nơi mọi thứ đều là một đối tượng. Sau đó, bạn có thể muốn xem xét lập trình hàm, trong đó ý tưởng về các hàm như các giá trị tìm thấy nguồn gốc của nó và nhận ra rằng một khối không gì hơn một đoạn mã có thể được thực hiện tùy ý và với các đối số khác nhau, nhưng cũng có thể truy cập các biến được xác định bên ngoài nó thông qua sự kỳ diệu của một thứ gọi là "đóng cửa".

Không phải là nơi tồi tệ để bắt đầu; các bài viết trên object-oriented programmingfirst-class functions sẽ giới thiệu các khái niệm này.

3

Để hiểu Ruby và Rails có một vài bước bạn có thể lấy ví dụ như:

  • Đọc Rails Guides đó cũng là tài liệu và trang trải các yếu tố cần thiết và chi tiết về kiến ​​trúc của khuôn khổ này. Thử nghiệm với các ví dụ được bao gồm.
  • Có sẵn tài liệu Rails Framework, cũng bao gồm nhiều thông tin trong phần readme hoặc phần tiêu đề của nhiều trang. Tính năng tìm kiếm của trình duyệt sẽ trở thành bạn của bạn khi điều hướng tất cả thông tin được lưu trữ trong tài liệu. Điều này cũng có thể được bổ sung bằng cách học cách sử dụng lệnh gem server để kích hoạt tài liệu trên máy trạm cục bộ của bạn.
  • Có hướng dẫn Ruby API ngôn ngữ (Core và Thư viện)

Bây giờ đây là sẽ cung cấp cho bạn một bộ tốt của tài liệu tham khảo. Như với việc học bất kỳ ngôn ngữ hoặc khuôn khổ mới nào thường là vấn đề lớn nhất là biết vị trí của thông tin. Và khi bạn nhấn một vấn đề với một cái gì đó trong ứng dụng bạn đang xây dựng, bạn không cần phải vật lộn với câu hỏi Tôi đã đọc ở đâu, hãy xem, tìm bit thông tin mà tôi cần.

Tập hợp thông tin tiếp theo hữu ích là nhiều hơn những gì tôi muốn gọi là ứng dụng và loại thông tin hậu cần. Điêu nay bao gôm;

  • Đọc hướng dẫn Programming Ruby để bạn biết kiến ​​thức cơ bản về ngôn ngữ được sử dụng để viết khung Rails.
  • Đọc Agile Web Development cung cấp cho bạn không chỉ thông tin chi tiết về khuôn khổ mà còn đưa bạn qua quá trình xây dựng ứng dụng theo cách tiếp cận rất nhanh nhẹn.
  • Hãy xem Advanced Rails Recipes sau đó sẽ mở rộng kiến ​​thức của bạn.
  • Tìm hiểu các công cụ đi kèm với khung làm việc như console, cào, đá quýmở rộng
  • Cuối cùng tìm thấy một dự án nhỏ, có lẽ một cái gì đó trên GitHub, mà bạn có thể xem lại các mã. Nó phải là một ứng dụng mà không phải là quá lớn để bạn không bị cuốn vào chi tiết, nhưng là một kích thước đủ để bạn có thể xem tất cả các phần làm việc cùng nhau như thế nào.

Hy vọng điều đó sẽ hữu ích.

3

Đọc những cuốn sách này và khi bạn gặp khó khăn trong việc nắm bắt một khái niệm, hãy hỏi từng cá nhân.

Ngôn ngữ ruby ​​Lập trình: http://oreilly.com/catalog/9780596516178
The Way Ruby: http://rubyhacker.com/toc.html
Ruby cho Rails: http://www.manning.com/black

Tôi sẽ trả lời câu hỏi số 2 như hai đứa kia vẫn còn mập mờ và có lẽ họ sẽ cần một vài chương
vars: ruby ​​vs C++

@var similar to this->var 
@@var similar to SomeClass::var (static) 
$var similar to global in c 

A: biểu tượng trong ruby ​​là một định danh số độc đáo, người phiên dịch chuyển đổi tất cả các biểu tượng trong chương trình của bạn thành các số nguyên duy nhất. Họ là hữu ích như là chỉ số (nhanh hơn so với chuỗi và dễ đọc hơn số nguyên): hash[:user_name]

+0

C không có globals – horseyguy

+0

Thei're toàn cầu theo nghĩa "bên ngoài", nhiều ppl gọi chúng là "toàn cầu". http://en.wikipedia.org/wiki/Global_variable – clyfe

+0

nó có phạm vi tập tin, chắc chắn, nhưng không phải là 'phạm vi toàn cầu'. Nó không thể truy cập từ bên trong các đơn vị dịch thuật khác ví dụ – horseyguy

1

Đừng cố gắng tìm hiểu mọi thứ cùng một lúc. Tập trung nỗ lực của bạn và xây dựng từng bước. Giảm thiểu sự nhầm lẫn bằng cách thực hiện một bước sau đây tại một thời điểm:

  1. Làm chủ các khái niệm [cơ bản] của lập trình hướng đối tượng.
  2. Làm chủ các khái niệm và cú pháp cơ bản của Ruby. Đừng lo lắng về Rails ở giai đoạn này.
  3. Làm chủ các khái niệm [cơ bản] của kiến ​​trúc Mô hình-View – Controller (MVC).
  4. (Tùy chọn) Tạo thứ gì đó bằng cách sử dụng khung MVC cho PHP (như cakePHP hoặc CodeIgniter). Bằng cách này, bạn sẽ thấy các khái niệm MVC đang hoạt động và bằng một ngôn ngữ mà bạn đã biết.
  5. Đường ray thời gian! Có rất nhiều sách, hướng dẫn, hướng dẫn, podcast và screencasts về Rails, cả miễn phí và trả phí.Nhìn xung quanh để tìm tài nguyên được đề xuất cho loại yêu thích của bạn và sử dụng nó để học Rails.

Một lưu ý phụ, cá nhân tôi không nghĩ rằng Rails là dễ học (dù sao đi nữa là vấn đề chủ quan). IMHO, nó có một đường cong học tập đáng kể, nhưng một khi bạn vượt qua nó, bạn có thể cũng thấy mình hiệu quả hơn khi phát triển web. Tức là, bạn có thể cũng thấy Rails là dễ sử dụng.

Một số lời khuyên chung:

  • Đọc một mình là không đủ để thực sự làm chủ một ngôn ngữ lập trình/khuôn khổ. Bạn phải viết mã .. rất nhiều mã. Không chỉ làm theo các ứng dụng ví dụ của tài nguyên học tập của bạn lựa chọn. Hãy xem Project Euler và các trang web tương tự cho những thách thức khác nhau và có thể giải trí hơn.
  • irb là bạn của bạn. Sử dụng nó nhiều như bạn có thể.
  • Nếu bạn không thể tìm ra điều gì đó, hãy tìm kiếm. Nếu bạn vẫn không thể tìm ra, hãy đăng câu hỏi lên Stack Overflow hoặc Ruby Forum. Chỉ cần đặt câu hỏi của bạn cụ thể.
  • Việc học cần có thời gian. Đừng thất vọng và làm mọi thứ trở nên dễ dàng.
1
  1. Đừng cố gắng học Rails, cố gắng tìm hiểu Ruby trước.
  2. Không có khối nào trong PHP hoặc C, nhưng tôi sẽ giải thích một chút ở đây:

    Bạn có thể nghĩ trong các khối giống như chức năng không có tên, ví dụ:

     
         my_array = [1,2] 
         my_array.each { |parameter| print(parameter) } 
         my_array.each do |parameter| 
          print(parameter) 
         end 
        

    the Array#each method sends, on each iteration, a parameter to the block, 
        in this case is the value of each element on the array. 
    
        the DEFinition of Array#each could be: 
        <pre> 
         def each(&block) 
          block.call(elem_of_the_array) 
          #the block will catch "elem_of_the_array" as "parameter" argument 
         end 
        </pre> 
    
        in PHP you can write this block as function like this: 
        <pre> 
        function name_less_function(parameter){ 
         print(parameter); 
        } 
        </pre> 
    

    khái niệm thực sự đằng sau các khối là Procs, làm nghiên cứu về chúng.

  3. Tìm hiểu lập trình hướng đối tượng, có lẽ bài này có thể giúp bạn =>http://raflabs.com/blogs/silence-is-foo/2009/12/13/the-ruby-object-model/

0

Làm thế nào tôi có thể tìm hiểu về các khối, và làm thế nào nó có thể liên quan đến các khái niệm từ PHP/C ?

Các khối có thể được xem là hàm lambda (như bạn đã nhận thấy bạn có một số trải nghiệm Python), chúng là loại ẩn danh.

@

Đây là một biến Ví dụ địa phương. Nếu bạn sử dụng @@, bạn sẽ nhận được một biến toàn lớp. Đối với ví dụ @@ number_of_all_created_classes và @my_var_that_is_for_this_instance_only

$

Đây là một biến toàn cầu.

:

Ah, mọi người sẽ ngọn lửa tôi cho điều này: đó là loại một con trỏ. Toán tử: cho phép bạn sử dụng tham chiếu chuỗi để trỏ đến một đối tượng.

"Magic khái niệm", suchs như đường ray tờ khai của Records, những gì xảy ra đằng sau hậu trường khi tôi viết has_one X

has_one, belongs_to, vv, có chức năng tương đối để vượt qua tham khảo. Chúng sẽ không liên quan đến C hoặc PHP cho vấn đề đó, nhưng nếu bạn đã thực hiện một số chương trình PHP/MySQL nghiêm túc và đã thực hiện một số ánh xạ quan hệ thì nó sẽ được phát triển. Bạn có thể muốn đọc về ORM.

Hiện tại tôi đang đọc "Phát triển Web nhanh với Rails 2.0", điều này thật tuyệt vời. Ngoài ra hướng dẫn được viết bởi cuốn sách Little Humble Little Ruby của ông Neighborly (có sẵn trực tuyến) là một cái gì đó nhanh chóng và tốt cho bạn đọc.

Tôi nghĩ tôi sẽ trả lời trực tiếp câu hỏi của bạn hơn.

Các vấn đề liên quan