traduccion science salary engineering degree computer book computer-science

computer-science - engineering - computer science salary



¿Qué concepto de informática valora más? (30)

Por alguna razón, me doy cuenta de que termino usando muchas máquinas de estados finitos en el trabajo. En particular, cuando estoy implementando un protocolo TCP / serie personalizado, son muy útiles y producen un resultado muy robusto (en mi opinión).

Mis días en las clases de CS han quedado atrás. Como tal, mi recuerdo de las cosas que aprendí allí es borroso. Tenía curiosidad por saber si hay otros conceptos que la gente está aprovechando y que he olvidado.

No hay respuesta correcta. Vota las respuestas que contienen el concepto que más utilizas. Simplemente terminaremos con los conceptos más utilizados en la parte superior. Para mí, será una lista de cosas para estudiar.

-Robert


"Cualquier problema en informática puede resolverse con otra capa de direccionamiento indirecto". - David Wheeler, programador jefe del proyecto EDSAC a principios de la década de 1950.

Cuando está bien aplicado, esto lleva a una generalización razonable como se ve en ejemplos tales como tipos de datos abstractos, clases reutilizables con métodos virtuales, etc.

Cuando se aplica mal, conduce a implementaciones excesivamente indirectas con una gran cantidad de sobrecarga de tiempo de ejecución debido a la generalización excesiva, por ejemplo, la arquitectura Intel 432.


"Depurar el código es dos veces más difícil que escribirlo. Por lo tanto, si escribes el código tan inteligentemente como puedas, por definición no eres lo suficientemente inteligente como para depurarlo".


Acoplamiento y cohesión.

Esencialmente, el paradigma de dividir y conquistar es la base de todo el software.

Está buscando conceptos ortogonales y entidades de software ortogonales, aquellos que exhiben acoplamiento suelto y alta cohesión.

Se utiliza un gosub en Basic? Estás utilizando C&C.


Análisis de requerimientos y bases de datos relacionales.


Basura dentro basura fuera.


Complejidad tiempo / espacio.


Complejidad.


Comprender y utilizar las estructuras de datos y los algoritmos proporcionados por las bibliotecas de idiomas (ya sea de la norma o de terceros, como Boost). No reinvente la rueda y aprenda qué ruedas hay por ahí que son mejores que las suyas.


Concurrencia y computación paralela. No lo toqué durante muchos años, pero se ha vuelto más relevante con cada año que pasa (y con cada duplicación del núcleo).


Copiando y modificando el código existente.


Cuanto más tiempo existe una falla en el software, más costoso es detectar y corregir, menos probable es que se corrija adecuadamente


Dividir un problema en subproblemas más pequeños, creo, es algo que hago muy a menudo, aunque no lo piense realmente:

  • Ayuda a llegar a la solución.
  • y también ayuda a obtener un código más limpio (funciones / métodos más pequeños, que hacen "cosas de unidad", por ejemplo)

Aún así, tal vez no sea realmente un "concepto" ... Evento si recuerdo algunas lecciones de algoritmos en las que nos enseñaron "divide para vencer" ^^


Si quieres algo más concreto, me gustaría ir con:

  • pruebas ; es algo que no hacemos cuando estamos fuera de la escuela ... Y aprendemos de la manera más dura que definitivamente es algo que tenemos que hacer más, ¡y mejor!
  • Algunos patrones de diseño, probablemente
  • Pensar antes de codificar, quizás lo más importante en nuestros trabajos ^^

El concepto "Google";)


El patrón de Model View Controller es el que uso más que cualquier otro.


Encapsulamiento o ocultamiento de información.


Estimar la complejidad de espacio / tiempo y utilizar estructuras de datos adecuadas para obtener un código mucho más simple / rápido. Modelar ciertos problemas como gráficos también fue útil de vez en cuando.


Estos son los cursos / conceptos universitarios que me parecieron más útiles para mi carrera profesional.

  • Introducción a las bases de datos
  • DBMS - cómo están trabajando
  • Algoritmos y estructuras de datos
  • Conceptos de programación orientada a objetos
  • Patrones de diseño (en su mayoría MVC, capas de aplicación)
  • Ingeniería de requisitos
  • Gestión de la calidad del software
  • Métricas del Software

Supongo que son todos ... No mencioné tecnologías específicas aquí, sino solo los conceptos.


Evitando optimizaciones prematuras, como dijo el Sr. Knuth:

"Deberíamos olvidarnos de las pequeñas eficiencias, digamos que aproximadamente el 97% de las veces: la optimización prematura es la raíz de todo mal". (de wikipedia)



Mantenlo simple. Si es posible, hazlo más simple.


No es específico de CS, pero recuerde que producir resultados que sean simples o concisos son buenos objetivos. Si puede producir algo simple y conciso, es probable que esté produciendo un trabajo de alta calidad.


No te repitas


Programación orientada a objetos


Programación orientada a objetos y estructura de datos


Resolución de problemas ...


Singleton, plantillas y patrones de estrategia.

También: YAGNI - No lo vas a necesitar
KISS - Que sea simple, estúpido.





Abstracción

Aho y Ullman escriben en la introducción a Fundamentos de Informática.

Pero fundamentalmente, la informática es una ciencia de la abstracción: crear el modelo correcto para pensar un problema y diseñar las técnicas mecanizables adecuadas para resolverlo.