2010-03-11 8 views
5

Vengo de un fondo C, php y bash, fue fácil de aprender porque todos tienen la misma estructura C, que puedo asociar con lo que ya sé.¿Cómo puede aprender este programador de C y PHP Ruby and Rails?

Luego, hace 2 años, aprendí Python y lo aprendí bastante bien, Python es más fácil de aprender que Ruby. Luego, desde el año pasado, estaba tratando de aprender Ruby, luego Rails, y lo admito, hasta ahora todavía no podía entenderlo, la ironía es que esos son calificados como fáciles de aprender, pero para un programador experimentado como yo, simplemente no podía asociarlo con lo que aprendí antes, tengo 2 libros sobre Ruby y Rails, y cuando lo estoy leyendo, nada está absorbido en mi mente, y estoy a punto de darme por vencida ...

En ruby, estoy teniendo dificultades para comprender los conceptos de bloques, y ¿por qué hay @variables a las que se puede acceder mediante otras funciones, y qué hacen $ variable y: variable? Y en Rails, ¿por qué hay una función como this_is_another_function_that_do_this, así que ruby, es solo una convención de nomenclatura o se genera automáticamente con esta variable _can_do_this_function. Todavía estoy desconcertado de donde vinieron todos esos conceptos mágicos y cosas? Y ahora, 1 año de tratar y absorbente, pero todavía no hay progreso ...

Editar: En resumen:

  1. ¿Cómo puedo aprender acerca de los bloques, y cómo puede estar relacionado con los conceptos de PHP/C?
  2. variables, lo que lo hace significa cuando una variable tiene el prefijo:
    • @
    • $
    • :
  3. "conceptos mágicos", suchs como carriles declaraciones de registros, lo sucede detrás de las escenas cuando escribo has_one X

OK así que, tengan paciencia conmigo con mi confusión, al menos yo 'M honesto conmigo mismo, y es más de un año desde la primera vez que intenta aprender rubí, y no estoy cada vez más jóvenes ..

por lo

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); 
    } 
} 

Y ahora, simplemente no podía conectar los puntos con Ruby, | b | {blocks}, usando @variables,: variables y variables_with_this_things.

Respuesta

6

Usted ha dicho que usted está leyendo los libros, así que probablemente lo que necesita es:

Leer menos, escribir más.

También soy de origen C y muchos conceptos de ruby ​​fueron completamente extraños para mí y aún no los entiendo a todos. Pero en lugar de solo leer, decidí escribir y ahora tengo pocos programas/scripts y páginas web (incluso bastante grandes) y realmente amo el rubí. Cuando escribas comenzarás a "sentir" todos estos conceptos. Use irb para probar lo que lee de los libros. Escribe algunos métodos con bloques incluso si no los entiendes y juegas con ellos.

1

¿Tal vez deberías despejar algunas de las preocupaciones específicas de las preguntas?

Por ejemplo:

@variables son variables de instancia de objeto - valores son locales de instancias específicas de un objeto y por lo tanto accesible desde todos los métodos.

1

Realmente debería leer un libro decente en Ruby. El mejor, que también se considera como el libro de referencia en la comunidad Ruby es el libro PickAxe: http://www.pragprog.com/titles/ruby3/programming-ruby-1-9

Esta es la tercera edición de Programming Ruby y cubre Ruby 1.9. La segunda edición del libro cubre Ruby 1.8. La primera edición cubre Ruby 1.6.Y la primera edición está disponible de forma gratuita en línea en: http://www.ruby-doc.org/docs/ProgrammingRuby/

La lectura de dicho libro le enseñará los conceptos básicos. Tal vez muchas de las cosas que ya sabrás, pero ya que preguntas cosas básicas como: variable (algo que comienza con ":" es un literal, no una variable) y @variable, realmente te insto a que leas un libro.

3

Además de las otras respuestas dadas hasta ahora, es posible que desee repasar la programación básica orientada a objetos. El concepto de "variables de instancia" es muy importante en un lenguaje (como Ruby) donde todo es un objeto.

Luego, es posible que desee buscar en la programación funcional, donde la idea de funciones como valores encuentra sus raíces y darse cuenta de que un bloque no es más que un fragmento de código que puede ejecutarse arbitrariamente y con diferentes argumentos, pero también puede acceder a variables definidas fuera de él a través de la magia de algo llamado "cierre".

Wikipedia no es un mal lugar para comenzar; los artículos en object-oriented programming y first-class functions presentarán estos conceptos.

3

Para comprender Ruby y Rails hay un par de pasos que puede tomar como:

  • Leer el Rails Guides que están bien documentados y cubren los elementos esenciales y los detalles de la arquitectura del marco. Experimenta con los ejemplos que están incluidos.
  • Tenga a mano la documentación Rails Framework, que también incluye mucha información en las partes del léame o partes del encabezado de muchas de las páginas. La función find de su navegador se convertirá en su amigo cuando navegue toda la información almacenada en la documentación. Esto también se puede complementar con aprender a usar el comando del servidor de gemas para iniciar la documentación en su estación de trabajo local.
  • Tener la guía Ruby API idioma (Core y Biblioteca)

Ahora bien, este es le dará un buen conjunto de material de referencia. Al igual que con el aprendizaje de cualquier nuevo lenguaje o marco, a menudo el problema más grande es saber dónde se encuentra la información. Y cuando se produce un problema con algo de la aplicación que está creando, no es necesario que esté luchando con la pregunta ¿Dónde leí, veo, encuentro esa información que necesito?

El siguiente conjunto de información que es útil es más de lo que yo llamaría tipo de información de aplicación y logística. Esto incluye;

  • Lea la guía Programming Ruby para que conozca los conceptos básicos del lenguaje utilizado para escribir el marco de Rails.
  • Lea Agile Web Development, que le ofrece no solo ideas sobre el marco, sino que lo guiará por el proceso de creación de una aplicación con un enfoque muy ágil.
  • Eche un vistazo al Advanced Rails Recipes que luego ampliará su conocimiento.
  • aprender las herramientas que vienen con el marco como la consola , rastrillo, gemas y extensiones
  • Finalmente encontrar un pequeño proyecto, tal vez algo en GitHub, que pueda revisar el código. Debería ser una aplicación que no sea demasiado grande para que no se inunde en los detalles, pero con un tamaño suficiente para que pueda ver cómo funcionan todas las piezas juntas.

Espero que ayude.

3

Lea estos libros, y cuando tenga problemas para comprender un concepto, pregunte individualmente.

El lenguaje de programación Ruby: http://oreilly.com/catalog/9780596516178
El Camino Rubí: http://rubyhacker.com/toc.html
Ruby Rails: http://www.manning.com/black

voy a responder a la pregunta número 2 como los otros dos son vagos y probablemente se necesitaría un par de capítulos
vars: rubí vs C++

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

a: símbolo en rubí es un identificador numérico único, el intérprete convierte todos los símbolos en su programa a enteros únicos. Son útiles como índices (más rápido que las cuerdas y más fácil de leer que los números enteros): hash[:user_name]

+0

C no tiene globales – horseyguy

+0

Son globales en el sentido "externo", muchas personas los llaman "globales". http://en.wikipedia.org/wiki/Global_variable – clyfe

+0

tiene un alcance de archivo, seguro, pero no 'alcance global'. No se puede acceder desde otras unidades de traducción, por ejemplo, – horseyguy

1

No intente aprender todo al mismo tiempo. Enfoca tus esfuerzos y construye incrementalmente. Reducir al mínimo la confusión de la siguiente manera un paso a la vez:

  1. dominar los conceptos básicos [] de programación orientada a objetos.
  2. Domine los conceptos [básicos] y la sintaxis de Ruby. Ni siquiera te preocupes por Rails en esta etapa.
  3. Domine los conceptos [básicos] de la arquitectura Modelo-Vista-Controlador (MVC).
  4. (Opcional ) Construir algo utilizando un framework MVC para PHP (como cakePHP o CodeIgniter). De esta forma, verás los conceptos de MVC en acción y en un idioma que ya conoces.
  5. Rieles tiempo! Hay muchos libros, guías, tutoriales, podcasts y screencasts sobre Rails, tanto gratuitos como pagados.Busque un recurso recomendado de su tipo favorito y utilícelo para aprender Rails.

En una nota lateral, yo personalmente no creo que Rails es que sea fácil de aprender (que es un asunto subjetivo de todos modos). En mi humilde opinión, tiene una curva de aprendizaje considerable, pero una vez que lo supere, usted puede y se encontrará más productivo en el desarrollo web. Es decir, usted puede bien encuentre que Rails es fácil de usar.

Algunos consejos generales:

  • lectura por sí sola no es suficiente para dominar realmente un lenguaje de programación/marco. Tienes que escribir código ... un montón de código. No solo siga la aplicación de ejemplo de su recurso de aprendizaje preferido. Mire Project Euler y sitios web similares para desafíos diferentes y probablemente más entretenidos.
  • irb es tu amigo. Úselo tanto como pueda.
  • Si no puede resolver algo, busque. Si todavía no puede resolverlo, publique una pregunta en Stack Overflow o Ruby Forum. Solo haz que tu pregunta sea específica.
  • El aprendizaje lleva tiempo. No te frustres y te tomes las cosas con calma.
1
  1. No trate de aprender Rails, tratar de aprender Rubí primera.
  2. No hay bloques en PHP o C, pero voy a explicar un poco aquí:

    Se puede pensar en bloques de igual nombre funciona-menos, es decir.

     
         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> 
    

    el concepto real detrás de los bloques son Proc, hacer una investigación acerca de ellos.

  3. aprender programación orientada a objetos, tal vez este post pueden ayudarle a =>http://raflabs.com/blogs/silence-is-foo/2009/12/13/the-ruby-object-model/

0

¿Cómo puedo aprender acerca de los bloques, y cómo puede estar relacionado con los conceptos de PHP/C ?

Los bloques se pueden ver como funciones lambda (como notaron que obtuvieron algo de experiencia en Python), son como anónimos.

@

Esta es una variable de instancia local. Si utilizas @@, obtienes una variable para toda la clase. Para number_of_all_created_classes es decir @@ y @my_var_that_is_for_this_instance_only

$

Ésta es una variable global.

:

Ah, la gente me llamas para esto: es una especie de un puntero. El operador: le permite usar una referencia de cadena para señalar un objeto.

"Conceptos mágicas", suchs como carriles declaraciones de registros, lo que sucede detrás de las escenas cuando escribo has_one X has_one

, belongs_to, etc., son funciones relativas a Referencia cruzada. No se relacionarán con C o PHP para el caso, pero si ha realizado alguna programación seria de PHP/MySQL e hizo algún mapeo de relación, surgirá. Es posible que desee leer sobre ORM.

Actualmente estoy leyendo "Desarrollo web ágil con Rails 2.0", que es asombroso. También la guía escrita por Humble Little Ruby Book del Sr. Neighborly (está disponible en línea) es algo rápido y bueno para que usted lea.

Pensé que respondería a sus preguntas más directamente.

Cuestiones relacionadas