¿Debo intentar aprender OOP en MATLAB?

No deberías aprender matlab. Aprende scipy en su lugar. Es igual de capaz para lo que Matlab fue diseñado, es decir, numérico, pero se conecta con un lenguaje mucho más potente (python), que admite todo tipo de otras bibliotecas, junto con muy buenas características de lenguaje que simplemente no existen en matlab. Además, scipy es extremadamente libre, modificable y extensible en formas que matlab no lo es. La única razón para usar matlab es mantener una gran base de código preexistente. Todos los proyectos nuevos se benefician mucho, mucho más que de scipy. Déjame elaborar.

Scipy es igual de capaz. Todavía no me he encontrado con un problema que pudiera resolver en matlab pero no en scipy, y he usado mucho los dos. La compatibilidad con gráficos, estadísticas, EDO, interpolación y álgebra lineal densa es esencialmente idéntica. Los problemas escasos pueden ser una historia diferente, pero scipy al menos tiene un apoyo escaso. Algunos negocios de simulink probablemente no sean tan buenos. Apuesto a que podrías hacerlo, pero no tendría una GUI. Personalmente no he tenido que usar matrices dispersas o simulink, por lo que no podría decirlo. Pero personalmente he probado todo lo que la mayoría de los esfuerzos de computación científica necesitarán. Es algo realmente bueno, muy a la par con matlab para todas las necesidades informáticas científicas menos las más exóticas.

Matlab es extraño, de una manera que traiciona su origen como un lenguaje que no fue diseñado por expertos en informática, sino por científicos e ingenieros de la variedad no informática y no informática. Piense en PHP, pero al menos diseñado por alguien inteligente, si ignora lo que lo convierte en un lenguaje útil que fomenta las buenas prácticas de programación. Constantemente, y a veces viola peligrosamente el principio de diseño de menor sorpresa. Ejemplos: Matlab no permite la declaración de funciones separadas pero relacionadas en el mismo archivo. Extraño. Sorprendente. Matlab hace cosas raras al estado global. Las secuencias de comandos que no se declaran como funciones dejan cada nueva variable en el alcance después de que hayan terminado. Extraño. Peligroso. ¡Matlab lanza literales enteros a FLOTANTE! Extraño, sorprendente y peligroso. Índices de Matlab de uno . Dios, matlab, te odio mucho. El soporte de programación de nivel superior de Matlab (excepciones, objetos, espacios de nombres, programación funcional, control de GC, control de mutaciones) es de mala calidad en el mejor de los casos.

Python es muy bueno. Fue diseñado de manera muy deliberada teniendo en cuenta la legibilidad, la buena organización, la documentación y otras cuestiones de mantenimiento. Con notables excepciones a la protección de datos, en gran parte por convención (peligroso, pero no sorprendente, jajaja), prácticamente sin control de mutación y una cierta falta de verificación de errores en el inicio, el soporte de programación de alto nivel de Python es excelente. En particular, la organización del código en módulos, la herencia simple de objetos y el sistema de argumentos opcionales de Python para funciones fomentan la creación de API muy buenas, y hay muchos de ellos, scipy es uno de ellos. La abundancia de buenas API para casi todo ha hecho de Python la cinta adhesiva / súper adhesiva del mundo del software, lo que hace que la interfaz entre su código científico y, digamos, las API web no solo sea posible, sino que sea lo más fácil posible. Agradable si está haciendo minería de datos en línea y desea analizar los resultados con facilidad similar a matlab. La biblioteca estándar de Python es la API más simple y mejor organizada que he usado. Python es un lenguaje muy fácil de aprender, con pocas sorpresas en el camino. El soporte unicode de Python 3 es muy cómodo. La clara dicotomía de la cadena frente a la matriz de bytes es muy agradable.

Terminaré resumiendo que los informáticos diseñaron Python y los otros científicos diseñaron Scipy, y así es como debe ser.

Como estudiante de posgrado que tiene que trabajar mucho con el código y los plazos, he estado formando una opinión sobre cuándo usar OOP es una buena idea. Escribir un buen código en términos de clases requiere una comprensión de la forma “natural” en que las cosas encajan: qué es un tipo de qué, cuáles son los problemas abstractos, qué interfaces deben satisfacerse mediante funciones, implementar soluciones a esos problemas, etc. Sentirse ambicioso , Hice cosas como leer sobre redes bayesianas y el algoritmo de suma de productos, hice la estructura orientada a objetos, escribí los detalles, descubrí que había entendido mal algunas cosas, reescribí la estructura orientada a objetos y finalmente reescribí los detalles y pernos Con experiencias como esta siendo lo suficientemente comunes, he aprendido a cortar el paso de “reescribir la estructura orientada a objetos” dejando que la organización orientada a objetos emerja gradualmente de funciones menos organizadas y estructuras de datos * cuando * estoy completamente seguro de que veo cómo encajan las cosas y siento que es un buen uso del tiempo.

El conjunto de fortalezas y debilidades de Matlab lo hace bastante bueno para el trabajo exploratorio y experimental y bastante malo para hacer “infraestructura”. Si cree lo que digo sobre OOP, usar OOP con matlab tenderá a ser menos fructífero que usar OOP con otros lenguajes como C ++ que se centran en la implementación.

Lo uso todo el tiempo y es muy fácil de aprender. No soy un purista de CS, por lo que solo me importa si es útil o no para mi propósito, y definitivamente lo es. Si quieres aprender OOP como un conocimiento formal de CS, no puedo comentar.

More Interesting

¿Por qué parece haber tan pocos desarrolladores de software antiguos en la industria?

¿Qué startups de Seúl están contratando pasantes de ingeniería de software de Ruby on Rails?

¿Qué se escribe en la evaluación de un candidato que está siendo entrevistado para un puesto de ingeniero de software en Google?

¿Cuánto ganan los reclutadores por cada candidato a ingeniero de software que acepta la oferta para empresas de tecnología como Google, Microsoft, Facebook, etc.? ¿Cuáles son los factores que afectan la cantidad que hace un reclutador?

¿Cómo filtran las startups las posibles contrataciones?

¿Qué buscan los reclutadores en la industria tecnológica en los perfiles de redes sociales?

¿Cuáles son los problemas críticos que enfrenta la organización de reclutamiento de hoy?

¿Qué empresas usan la tarea durante el proceso de entrevista para los candidatos de ingeniería de software?

¿Cómo ha logrado Google mantener una barra de contratación tan consistentemente alta a pesar de ser una gran empresa?

¿Cuáles son las diferencias en los requisitos para las pasantías de ingeniero de software entre Yahoo, Amazon, Twitter y Mozilla y otras compañías tecnológicas? (Ver descripción de la pregunta para más detalles)

En una entrevista técnica, si conozco algunos conceptos mejor que el entrevistador o señalo fallas en el diseño de ingeniería existente de esa compañía, ¿me contratarán?

¿Qué recursos (si los hay) existen para los ingenieros que buscan oportunidades de compañías que proporcionan visas H1B?

¿Los reclutadores realmente entienden los proyectos técnicos cuando se les explica o simplemente lo toman como inglés?

¿En qué aspectos podría ser mejor trabajar en Microsoft que en Facebook para un ingeniero de software graduado?

¿Están los SDET / ingenieros de garantía de calidad menospreciados por los SDE / desarrolladores?