¿Qué terminología puede ser confusa para los nuevos programadores?

Esto es lo que aprendí de mis muchos años de programación y abarca mi campo de especialización, por lo que si hay algo que me he perdido, lo más probable es que lo haya olvidado o no lo sé.

  • Framework : una biblioteca escrita en su idioma de soporte que le permite cambiar su flujo de trabajo (generalmente para mejor). Importante para proyectos con múltiples desarrolladores o aquellos con expectativas de longevidad.
  • Algoritmo : un proceso particular que puede ser exclusivo de su sitio (como el ranking de búsqueda de Google (empresa)). Importante para hacer que su aplicación sea mejor que cualquier otra.
  • Lado del cliente : este es cualquier proceso que se realiza en un servidor y está oculto para el usuario. Un ejemplo serían los algoritmos.
  • Lado del servidor : este es cualquier proceso que se realiza en la computadora de su visitante y puede ser visto por el usuario. Un ejemplo sería widgets o JavaScript (lenguaje de programación).
  • Base de datos relacional : una base de datos que permite una estructura de relaciones entre múltiples campos y tablas, como la indexación y las búsquedas de texto completo.
  • Base de datos NoSQL : una base de datos que no tiene una estructura fija y puede escalar horizontalmente, como un almacén de valores clave como Memcached o Redis.
  • MVC (Modelo / Vista / Controlador) : esta es una estructura de programación común utilizada para el mantenimiento y para evitar el ‘código spagetti’. Esto se implementa en muchos marcos modernos, incluidos CodeIgniter y Yii para PHP o Backbone.js para JavaScript.

El controlador generalmente contiene los procesos del lado del servidor exclusivos de una determinada página, como el manejo de las cargas de fotos de los usuarios y su carga en una determinada carpeta dentro de su servidor. Los modelos generalmente se cargan en controladores y se procesan como si estuvieran codificados aquí.

El modelo es procesos genéricos para su aplicación, como verificar si un visitante ha iniciado sesión o almacenar una cookie en su computadora. Esto está diseñado para garantizar que si desea realizar un cambio en un proceso genérico, se puede cambiar simplemente cambiando el código en el modelo, que cambiará automáticamente en toda la aplicación.

La vista contiene el código que se usa para preparar la salida del controlador al usuario. En la mayoría de los casos, esto incluye HTML y afectará lo que el usuario ve en la página web. Las vistas generalmente se dividen en varias capas, como el encabezado, el menú, el contenido y el pie de página, que el contenido sería exclusivo de la página que visita el usuario.

  • foobar : este es un término genérico estándar utilizado para describir elementos en la documentación, como los nombres de funciones.
  • aguja / pajar : muy familiarizado en la documentación del código, para explicar qué es la consulta (aguja) y qué debe intentar buscar el código (pajar). Este se explica por sí mismo.
  • búsquedas de texto completo : este es un tipo de función utilizada en bases de datos relacionales como MySQL para ofrecer búsquedas avanzadas en tablas para grandes bloques de datos.
  • índices: aquí es donde se prioriza una determinada fila de una tabla de base de datos en las consultas para acelerar la ‘navegación’ de los resultados de búsqueda, ya que todo volverá al índice. Estos deben ser mínimos, o el rendimiento será peor que no usarlos.
  • API (Interfaz de programación de aplicaciones) : se utiliza para enviar solicitudes a otros servidores (puede ser de diferentes tipos, como REST o SOAP), lo que puede hacer que su aplicación utilice datos o tecnologías ofrecidas por terceros. Un ejemplo de una solicitud de API es recopilar su feed de Twitter desde su sitio web.
  • REST (Transferencia de estado de representación) : este es un tipo de solicitud de API que generalmente se realiza en HTTP (Protocolo de transferencia de hipertexto) mediante solicitudes GET, POST o HEAD.
  • SOAP (Protocolo simple de acceso a objetos) : este es un tipo de solicitud de API que se realiza de diferentes maneras, una de ellas incluye la publicación de datos en los encabezados de una solicitud y generalmente es más segura (pero menos popular) que REST, ya que es más difícil de manipular o piratear a mi conocimiento.
  • SMTP (Protocolo simple de transferencia de mensajes) : este es el estándar de Internet para el correo electrónico y es necesario para enviar correo a través de Internet en su propio servidor. Muchas instalaciones de código lo tienen preinstalado, siendo PHP uno de ellos con su soporte de función mail ().
  • OOP (Programación Orientada a Objetos) – Esto es simplemente dividir la ejecución de código dentro de diferentes objetos que pueden ser tratados como grupos independientes dentro del código y se tratan así en la ejecución. Implica el uso de clases y funciones (y, opcionalmente, también pueden ser variables) que también se utilizan para aumentar la capacidad de mantenimiento a medida que el código se organiza correctamente.
  • Variables : este es un elemento de ejecución de script utilizado para almacenar información, fórmulas y datos dinámicos / estáticos para acceder más adelante en el código. En PHP, se antepone con un signo de dólar ($) y en JavaScript se antepone con “var” para declarar.
  • Clases : aquí es donde puede hacer que las funciones y variables se conviertan en subconjuntos de un nombre de clase que facilite el acceso a ellas. Las clases se han convertido en una gran parte de OOP, ya que se utiliza como una declaración de un “objeto”.
  • Funciones : aquí es donde puede hacer un proceso y hacerlo independiente o como parte de una clase (que luego se convierte en un subconjunto como parte de OOP) y se les puede pedir que hagan cualquier cosa dentro del idioma nativo. Por ejemplo, next_monday () se puede programar para que le diga cuántos días faltan hasta el próximo lunes y se puede usar una cantidad ilimitada de veces y se ejecuta de manera única a lo largo de cualquier solicitud en un script.
  • Git : esta es una forma bastante moderna de mantener el código, ya que permite a los desarrolladores colaborar / descargar proyectos más fácilmente a través de sus propias computadoras y los cambios se pueden revertir en el código, por lo que es una herramienta más práctica entre los desarrolladores. En última instancia, se convertirá en la forma más popular de compartir código, si aún no lo ha hecho.
  • AJAX (JavaScript asíncrono y XML) : esto es lo que utilizan todas las aplicaciones rápidas que existen, y es una capa para JavaScript debido al hecho de que le permite realizar rápidamente solicitudes a su servidor desde el navegador web sin volver a cargar la página en es más completo, que es más lento. Está preprogramado en muchos marcos JavaScript, incluidos jQuery, MooTools y Prototype.js.
  • Servidores maestro / esclavo : esto se usa como una forma de escalabilidad y es parte de la optimización de la base de datos, ya que significa mantener múltiples bases de datos que siempre están en línea para presentarse cuando el servidor maestro puede no estar disponible debido a una demanda excesiva. Esto requiere múltiples ejecuciones de la misma consulta para que todas las bases de datos sean precisas, pero definitivamente es más confiable y es obligatorio para el tiempo de actividad en muchas aplicaciones web.
  • Optimización del servidor : este es simplemente el proceso de realizar cambios en el diseño arquitectónico de una aplicación para procesar las solicitudes de manera más eficiente y con la menor potencia posible para que pueda extenderse a más usuarios. Esto se usa como una forma de reducción, ya que puede reducir en gran medida los costos.
  • SVG (Gráficos vectoriales escalables) : esta es una nueva capa gráfica para HTML que permite el uso de elementos gráficos interactivos que se pueden escalar como puede ver en el nombre, y además, tiene mucho soporte para la manipulación de imágenes en el navegador usando Bibliotecas de JavaScript como Raphael-js.
  • SEO (Search Engine Optimization) : esto simplemente hace que su aplicación sea más compatible con los robots de los motores de búsqueda para que pueda obtener el mayor potencial del tráfico de motores de búsqueda a su sitio web (el mejor tipo de tráfico). Un ejemplo de ser más compatible es tener títulos de sitios únicos y metaetiquetas, y generalmente se hace compatible con Google, ya que poseen más del 90% del mercado de búsqueda y no se moverán durante mucho tiempo.

Intentaré actualizar la lista a medida que encuentre más para agregar a la lista, aún no está completa. Si lo desea, no dude en actualizar mi respuesta y con mucho gusto acepto sus cambios.

  • Cierre

Función anónima, algo bastante confuso la primera vez que la encuentras. Eso se vuelve aún más confuso cuando ves a personas divirtiéndose haciendo un uso avanzado y complejo.

  • Resumen (tipo de clase o lo que sea)

No es lo más difícil de entender, pero aún queda una cosa más por entender.

  • Herencia

La herencia y todo su uso e implicaciones pueden parecer muy fáciles y lógicos al principio, y también pueden volverse muy complejos.

  • Interfaz

Para evitar el diamante lo que dices?

  • Herencia múltiple
  • Dinámico vs Estático
  • Interpretado vs compilado
  • Entorno de ejecución

¿Por qué dice que tengo que instalar esto para ejecutarlo? Ya descargué mi programa, ¿por qué no funciona ahora? ¡No puedo usarlo!

  • JVM

El entorno de ejecución más conocido.

  • ¡I18N y L10N también deberían ser términos bastante confusos!

Los conceptos son fáciles de entender, complejos de implementar y, sobre todo, descritos por acrónimos completamente oscuros (al menos la primera vez que los conoces)

  • Complejidad

Especialmente la forma en que lo describe. ¿Qué tipo va a ser más rápido? Aquí dice O (log (n)), ¿qué se supone que significa eso?

  • Alta disponibilidad
  • Política de caché, caché, caché
  • Proxy y proxy inverso
  • I / O
  • Clase vs instancia

Cómo deseo que todas las personas con las que he trabajado entiendan esa diferencia claramente.

  • Servicio

La palabra se usa para describir tantas cosas diferentes que puede ser muy confusa.

  • Recolector de basura

Entonces esto significa que nunca puedo tener una pérdida de memoria ¿verdad?

  para (i = 0; i  boom!
  • JIT

Si tuviera que elegir un par de términos / conceptos que me parecen más confusos o mal entendidos por muchos, diría:

1) Sincrónicamente vs Asincrónicamente / Bloqueando vs Sin bloqueo / Seguridad de roscas / Bloqueos :
Las personas a menudo piensan que son la misma idea. Suenan similares pero describen diferentes aspectos del diseño. La mayoría de las personas comienzan a aprender programación de procedimientos como Java para codificar programas de procedimientos muy simples que se ejecutan en un solo hilo, lo que requiere no conocer ninguno de ellos. Luego, cuando pasa a un entorno multiusuario, la mayoría de las veces tiene que lidiar con un par de estos términos, pero todavía está bien si solo sabe qué es un bloqueo duro. Quizás cuando comienzas a programar en un entorno web receptivo comienzas a darte cuenta de que lo que aprendes en el paradigma procesal simple no es suficiente. Y también cuando las personas comienzan a aprender a codificar, generalmente codifican para 1 o 2 registros y piensan que debería funcionar para 1 millón de registros. Sí, funciona, pero se darán cuenta de que solo se completará cuando cambien a un nuevo trabajo. Saber cómo codificar funciones asíncronas ayudará en este aspecto (lo aprendí cuando comencé a codificar en JS e incluso Java EJB).

2) Transacción, confirmación, reversiones, etc.
Este es el concepto más incomprendido incluso entre los graduados en ciencias de la computación / ingeniería, particularmente lo que cada uno de ellos hace realmente. Aprendimos esto en la Base de datos 101, pero nunca miramos un DBMS real para saber cómo los manejan. La mayoría de las personas no se dan cuenta de que el propósito real de la confirmación no es tanto literalmente “confirmar” los cambios, sino deshabilitar la reversión. Una vez tuve un colega que me explicó que el sistema se bloqueó en el momento en que el programa se estaba comprometiendo y, por lo tanto, la mejor manera de resolver esto es revertir todos los datos a su estado anterior antes de volver a ejecutar el programa. Dijo esto, y la mayoría de nosotros lo haremos, porque la idea de una confirmación es sinónimo de purgar actualizaciones a su base de datos y se olvidó de cómo y cuándo ocurrirá una reversión. Algunas personas incluso creen que siempre puedes retroceder después de una confirmación. La mayoría de los DBMS realmente permiten la confirmación automática y si se trata de un sistema de bajo uso, nunca necesitará comprender qué hacen exactamente la confirmación y la reversión.