¿Qué idioma para comenzar en Linux? [cerrado]

19

Estoy a punto de comenzar un grado de seguridad de la información de 4 años en Purdue. El título no requiere ningún curso de programación. Entonces, la única vez que podré tomar una es la electiva ocasional. Así que la mayor parte de mi aprendizaje será por mi cuenta. Al comienzo de mi último año de secundaria, decidí cambiarme completamente a Linux. Hasta ahora he estado aprendiendo algunas cosas de Linux y seguridad. Sin embargo, también creo que será importante para mí también aprender algunos lenguajes de programación.

Básicamente estoy planeando aprender a programar lado a lado con aprender a usar Vim. Por lo tanto, lo más probable es que sea un proceso lento. Al final creo que valdrá la pena. Como dije, voy a entrar en la seguridad, por lo que principalmente crearé aplicaciones relacionadas con la seguridad, la mayoría de las cuales estarán relacionadas con la red. También me gustaría comenzar a desarrollar aplicaciones de Android, pero eso será más adelante.

Dicho esto, tengo algunas ideas. Estaba pensando en comenzar con JavaScript, porque es multiplataforma, y ​​lo he visto sugerido antes. También he estado escuchando mucho sobre Ruby o podría seguir la ruta natural de Linux con C. ¿Qué dirección debo tomar?

JD Davis
fuente

Respuestas:

53

Primero y principal:, bashjunto con las utilidades de línea de comandos comunes. Bashes la interfaz de usuario predeterminada para el sistema operativo, y muchos programas en un sistema Linux se incluirán en un script de shell en algún nivel. Puede ser peculiar, tiene algunas idiosincrasias y, a menudo, parece francamente tonto, pero es algo con lo que tendrá que lidiar, así que póngase cómodo. Las herramientas estándar como grep, diff, head, tail, sort, uniq, y así sucesivamente, va a ser muy útil no sólo con secuencias de comandos shell, pero con su productividad en la línea de comandos.

Aprende al menos un poco c. Es en lo que están escritos los niveles más bajos del sistema, y ​​le dará una mejor comprensión del sistema en su conjunto.

Elija cualquier idioma de nivel superior que desee. Python, ruby, perl, java, Sea cual sea - siempre y cuando que lo disfruten. Aquí es donde realmente comienza a aprender a "programar", y de aquí en adelante será más fácil aprender más idiomas y seguir aprendiendo .

JimB
fuente
2
Estoy de acuerdo con todos los puntos enumerados aquí.
Joe
66
Si usted va a aprender fiesta, entonces debería incluir el aprendizaje sobre awk, sed, cabeza, cola, corte, tr, diff, grep, find, ps, netstat, tcpdump, clasificar, uniq, etc., etc., etc.
jftuga
2
@jftuga De acuerdo. Un gran porcentaje de mi kit de herramientas son las habilidades para hacer "extracción e integración de datos", una forma elegante de decir "manipular archivos de texto formateados". Una vez que comprenda la canalización y conozca las herramientas comunes, no se verá obligado por el flujo de trabajo de ningún software pre-enrollado. También soy un gran admirador de MS Powershell, que se apoya en los hombros de Bash en muchos aspectos.
AndyN
@jftuga - señaló. Aunque creo que estos son importantes, no creo que alguien nuevo en Linux deba preocuparse por aprender las armas grandes como sed / awk en profundidad, pero deben tener suficiente comprensión para poder descifrar el código existente si lo encuentran .
JimB
8
Estoy de acuerdo con todo, pero recomendaría Python sobre los demás como un lenguaje de alto nivel específicamente porque se ha convertido en el lenguaje de nivel superior más común para las herramientas de administración de servidores. Te encontrarás mucho más a menudo que rubí o java. Perl también es común porque es muy viejo, así que elegiría el siguiente.
tylerl
10

Encontrará que todo el mundo recomendará su idioma favorito. Mi idioma favorito es Perl, así que eso es lo que recomiendo. :) Sin embargo, más allá de mi preferencia personal, hay algunas buenas razones por las que deberías considerar usar Perl:

Primero, perl es un maravilloso lenguaje de propósito general. Es fácil comenzar en perl escribiendo scripts simples para hacer el mismo tipo de cosas que hace en scripts de shell, como manipular archivos y tomar decisiones basadas en la entrada del usuario. Esto proporciona una introducción muy fácil y gradual a las ideas generales de programación. Perl ha existido durante bastante tiempo, por lo que hay muchos recursos (libros y sitios web) para comenzar.

En segundo lugar, Perl es un lenguaje increíblemente potente y expresivo que admite todas las funciones de programación modernas. Lo he estado usando durante más de quince años y todavía estoy aprendiendo nuevas formas de hacer las cosas de manera más eficiente. Por ejemplo, si desea explorar la programación orientada a objetos, Perl tiene eso (particularmente a través de Moose ).

Tercero, perl viene con el poder y la flexibilidad casi infinitos de su repositorio de complementos oficial, CPAN . Por ejemplo, para seguir la idea de escribir software de seguridad, digamos que desea desarrollar algún tipo de escáner de seguridad de red personalizado. En lugar de escribir todo eso usted mismo, puede comenzar usando NMAP :: Scanner como motor de escaneo, y luego escribir sus propios ajustes y mejoras además de eso.

Finalmente, si desea explorar la programación web, Perl también lo tiene. Una forma moderna y popular de escribir software web en Perl es Catalyst , que proporciona un marco web MVC moderno para desarrollar rápidamente cualquier tipo de aplicación web.

En conjunto, la ventaja de perl es que le permite comenzar a escribir pequeños scripts y programas de línea de comandos, y gradualmente convertirse en aplicaciones modernas con todas las funciones. Por supuesto, el precio de esta flexibilidad es la complejidad. Depende de usted estudiar y aprender a hacer las cosas de la manera correcta, perl no impone buenas prácticas como lo hacen otros idiomas. Personalmente, me gusta esta libertad, especialmente junto con todos los excelentes recursos en la web para aprender a usar perl.

Phil Hollenback
fuente
Perl es un lenguaje de script (principalmente); y la mayoría del sistema operativo está programado en C.
Chris S
Claro, pero no creo que eso importe mucho en el contexto de esta pregunta. No parece que el OP realmente quiera o necesite aprender sobre la programación a nivel del sistema operativo.
Phil Hollenback
Sugeriría que Perl es una buena forma de escribir código para una aplicación de seguridad que apunta a algo escrito en otro lenguaje (a menudo C) que ya entiendes. Por lo tanto, si esta distinción tiene sentido, clasificaría a Perl como una herramienta que debería aprender a usar, en lugar de un lenguaje que debería aprender a entender (completamente).
BMDan
6

Tres idiomas te mantendrán en buen lugar. En orden decreciente de importancia (es decir, el primero es el más importante):

  1. Pseudocódigo . A menudo, la implementación con la que está trabajando será una amalgama de media docena de idiomas y herramientas, de las cuales solo algunas conocerá directamente. Sin embargo, si sabe qué patrón se está implementando, puede averiguar qué entrada se está entregando a una pieza y qué salida debe dar, probarla en exclusión y determinar si es la pieza la que se está rompiendo.
  2. C . Para bien o para mal, es lo que ejecuta el universo (Linux), y le brinda una visión lo suficientemente cercana de las cosas que puede comprender lo que realmente están haciendo los lenguajes de nivel superior (por ejemplo, PHP paso por referencia, o modelo de hilo de Java).
  3. Casi cualquier otra cosa excepto C ++ . Un lenguaje funcional como SQL o, mejor aún, Haskell, o algo no tan parecido a C-ey, si todo lo demás falla, Java puede funcionar para esto, pero aún es muy procesal: obtenga altas calificaciones aquí; la idea es envolver tu cerebro con algo lo suficientemente diferente de lo que has hecho antes que no puedes evitar darte cuenta de las limitaciones de lo que has hecho antes. En términos de utilidad pura, bash probablemente también pertenece a esta lista, pero si no tiene una base en otra cosa, terminará escribiendo C con la sintaxis bash en lugar de explorar realmente su poder.
BMDan
fuente
1
+1 para pseudocódigo. Me gusta seudocódigo en los comentarios y luego codificar los comentarios
sreimer
2
+1 para pseudocódigo y "Cualquier otra cosa excepto C ++". En el mundo de Linux, debe aprender al menos uno script language, como pythono PHP.
yegle
2
No sé si el pseudocódigo es una buena recomendación para un principiante. El pseudocódigo será comprensible después de aprender la mayoría de los lenguajes de estilo c, entonces, ¿debería uno realmente esforzarse en aprender un pseudocódigo en sí mismo? Sin mencionar que no existe una única sintaxis de pseudocódigo, lo que puede confundir a un principiante.
JimB
@JimB: El punto es aprender a pensar lógicamente, independientemente del idioma. ERD, UML y similares son las herramientas de la torre de marfil para hacer esto, pero no tiene que aprender nada tan formal. La idea es aprender a trazar sus pensamientos y luego compararlos con el resultado esperado. Cuando se da cuenta de que, por ejemplo, la base de datos no tiene una forma (inherente) de saber qué encabezados HTTP se enviaron como parte de la solicitud al servidor web, puede eliminar una variable de la consideración. Del mismo modo, cuando escribe pseudocódigo para una función, a menudo detecta casos de borde y esquina que de otro modo no podría.
BMDan
Estoy completamente de acuerdo, solo creo que señalar a un principiante al "pseudocódigo" va a causar confusión, ya que no es algo formal. El seudocódigo de la mayoría de las personas será una amalgama de los lenguajes de estilo c en los que se sienten más cómodos, además de una sintaxis ad-hoc.
JimB
4

Deberías aprender varios idiomas. Sugeriría comenzar con Python. Se recomienda ampliamente por ser fácil de aprender y por ser muy útil, hay muchos excelentes materiales de autoaprendizaje disponibles de forma gratuita, y creo que los profesionales de seguridad de TI lo utilizan ampliamente. Casi cada vez que veo profesionales de seguridad que publican código de demostración, es Python.

bgvaughan
fuente
+1 para python, y Python no solo es popular en el mundo de Linux.
xiao
4

Estoy a punto de comenzar un grado de seguridad de la información de 4 años en Purdue. El título no requiere ningún curso de programación.

¿Soy el único en pensar OMG! ¿en este punto?

También creo que será importante para mí también aprender algunos lenguajes de programación

Yo diría que sí. Aunque realmente no espera convertirse en un programador competente, probablemente necesite las habilidades necesarias para simular / recrear ataques y comprender cómo funciona el proceso de programación. También necesitará las habilidades para analizar datos y extraer información de fuentes masivas (como registros). JimB ha mencionado bash, y aunque sin duda usará esto, solo toma alrededor de un par de horas aprender los bits esenciales. En realidad, el único lugar en el que es probable que veas bash es en los sistemas Linux, pero los otros shells son muy similares.

Recomiendo aprender awk y / o Perl para el procesamiento de datos. No se preocupe por ningún requisito para marcar una casilla orientada a objetos, pero también recomendaría mirar idiomas no procesales.

Learning C también lo expondrá a mucha información sobre cómo el código se convierte en un programa ejecutable (compilar es solo un paso en un proceso muy complejo).

La opción obvia para alguien interesado en el desarrollo de Android / dispositivos móviles sería Java, pero Java se esfuerza mucho por aislar al desarrollador de tener que lidiar con las realidades del funcionamiento y los protocolos; es mi experiencia que aquí es donde tiene problemas de seguridad con Java aplicaciones es decir, podría ayudarlo a lograr su objetivo final, y se verá bien en su CV, pero no espere que aprender Java complemente mucho su conocimiento de seguridad.

symcbean
fuente
1
No eres el único. : -o
Keith
2

Mi consejo:

  • bash(y sus características) no son lenguajes de programación de propósito general. Si bien es posible lograr algunos scripts sofisticados bash, no es la mejor manera de aprender programación en general. Es la forma más natural de realizar tareas de administración de sistemas que giran principalmente en torno a la ejecución de otros programas, el manejo de sus archivos de datos y directorios y la organización de entradas y salidas hacia y desde ellos. Si bashes un martillo, resérvelo para problemas que realmente se parecen a las uñas. Aprender a hacer cualquier cosa que no sea trivial bashserá considerablemente más fácil si aprende algunos subconjuntos muy pequeños de ( sedy awkdado que la manipulación de cadenas bashse inspira en gran medida en la sintaxis de operaciones similares en estos "pequeños" lenguajes).
  • Para la programación de propósito general en Linux, escuchará muchos argumentos apasionados. Los dos mejores contendientes son Perl y Python . Ambos son lenguajes de scripting de muy alto nivel que tienen un propósito general, que exponen suficiente funcionalidad de bajo nivel para realizar casi cualquier operación que sea accesible para cualquier proceso de espacio de usuario en su sistema, y ​​con enormes colecciones de módulos y bibliotecas preescritas disponibles.

Yo te recomiendo que lea un texto introductorio sobre C y pasar algún tiempo en marcha del stracey ltracecomandos en algunos comandos simples como servicios públicos lsy mkdiry /bin/echoetc (en realidad en estos días me gustaría sugerir ltrace -Sen lugar de strace, pero incursiones en la salida de ambos comandos y en la ltracesalida aumentada por la -Sopción será extremadamente educativa).

C es el lenguaje de programación principal en el que se escriben el kernel de Linux y la libc de GNU. (Las piezas pequeñas están en ensamblaje). Casi todos los programas en un sistema Linux (u otro sistema similar a UNIX) están vinculados con las bibliotecas C (libc). Los principales intérpretes de Perl y Python (y la mayoría de los otros lenguajes de scripting) también están escritos en C. Estos programas (el núcleo, las bibliotecas comunes del sistema y los diversos intérpretes de scripting language) están escritos por programadores en C, su diseño y características están fuertemente influenciadas por sus implementaciones subyacentes. Por lo tanto, una comprensión más profunda de cualquiera de estos eventualmente implica comprender C. No necesita saber nada sobre C ++ ni Java para comprender la programación a este nivel. (Es posible que cada uno sea interesante y necesario por derecho propio según el parche de su carrera,

Entonces, si está de acuerdo con mis premisas hasta ahora, lo hemos reducido a una elección entre Perl y Python.

Aquí es donde comienzan las verdaderas guerras de llamas.

Mi consejo es centrarse primero en Python (2.x). Python tiene una sintaxis relativamente simple y consistente. Puede aprender los conceptos básicos de la sintaxis de Python en unas pocas horas y esa es la gran mayoría de la sintaxis que encontrará. Hay solo unas pocas características (comprensión de listas, expresiones generadoras, decoradores) que son arrugas a la sintaxis básica. Por lo tanto, la mayor parte de su esfuerzo en aprender Python se dedicará a aprender las extensas bibliotecas estándar y tratar de encontrar la "mejor" manera de usarlas (y descubrir cuáles son los conjuntos específicos de excepciones que vale la pena manejar para hacer que sus programas sean robustos) y, lo más importante, en el aprendizaje de los conceptos subyacentes.

Creo que las bibliotecas extensas de Python y su sintaxis relativamente simple tienen dos desventajas distintas.

En primer lugar, a medida que aprende a hacer cosas en un nivel muy alto en Python, puede ser tedioso pensar en tener que trabajar en un nivel inferior. Donde trabajo Perl es el estándar. Prototipo mi trabajo en Python, donde sé que puedo hacer que funcione mucho más rápido y confiable que en Perl; entonces temo tener que pasar y portarlo a Perl para mis colegas. (Fui razonablemente bueno en Perl años antes de usar Python, así que no es una cuestión de simple familiaridad).

La otra desventaja es que a veces es difícil encontrar la forma de más alto nivel para realizar una tarea determinada en Python. Por ejemplo, para buscar una página web, puede intentar hacerlo inicialmente con sockets de bajo nivel ... lo que funcionará. Sin embargo, estaría duplicando bastante código que ya puede encontrar incluido en los módulos urlliby / o urllib2. El hecho mismo de que las bibliotecas estándar, a partir de 2.7.1, incluye ambos, hace mi punto. Donde sea posible, los mantenedores de Python han extendido los módulos y API más antiguos de manera transparente; Sin embargo, hay docenas de casos en los que Python retiene dos o tres módulos donde la extensión transparente no fue posible por alguna razón. (Para otro ejemplo usted podría mirar a las opciones para analizar las opciones de línea de comandos: argparse, optparseygetopt. Hay poco daño al escribir sus programas usando getopt(el más antiguo de estos). Para utilidades muy simples con pocas opciones y una convención de llamada rígida (utilizada solo por un pequeño grupo de personas, por ejemplo), entonces no hay nada inherentemente malo en caminar sobre sys.argvti mismo. Sin embargo, por lo general, vale la pena leer los documentos detenidamente y seguir los enlaces en la parte inferior de los módulos de nivel anterior o inferior que describen las características disponibles más nuevas o de nivel superior.

Mi consejo se basa en mi opinión de que desea centrarse en conceptos más profundos y no tener que gastar gran parte de su tiempo y esfuerzo en cuestiones sintácticas y específicas del idioma. Comprender cuándo usar un subproceso, frente a un hilo, o las funciones de procesamiento múltiple que se incluyen con Python tiene relativamente poco que ver con el lenguaje y todo lo que tiene que ver con el dominio de la programación, independientemente del idioma. (En el punto en el que pueda comprender los argumentos sobre el modelo impulsado por eventos de Twisted en comparación con el subprocesamiento y el multiprocesamiento, entonces probablemente habrá dominado Python y estará listo para programar en cualquier lenguaje).

El argumento contrario, para Perl, es simple y práctico. Hay bastantes trabajos más que requerirán, específicamente, habilidades con Perl. Perl es un lenguaje poderoso y tiene bibliotecas extremadamente extensas. (El núcleo de Perl que se distribuye con la mayoría de los sistemas Linux cubre una gama de funcionalidades más pequeña que las bibliotecas Python estándar; se supone que habrá instalado un número significativo de paquetes adicionales desde su distribución o a través de CPAN --- el archivo completo de Perl Red). (Por el contrario, hay menos módulos y paquetes de Python que tengo que buscar por separado ... están disponibles en PyPI --- el Índice de paquetes de Python).

Por lo tanto, si aprende Perl, tendrá una ventaja para encontrar trabajos, en particular trabajos de administrador de sistemas, a corto plazo. Sin embargo, la sintaxis de Perl es ... bueno ... en palabras de algunos de sus propios entusiastas ... "patológicamente ecléctico". Perl puede ser extremadamente conciso y su código está lleno de bastante puntuación. Quienes lo aman argumentarán sin cesar que es "fácil" y tiene mucho sentido --- y tendrán infinitas oportunidades para hacerlo en foros que están llenos de confusión sobre cómo exactamente se interpretó un fragmento de código. La sintaxis y el lenguaje utilizado en la documentación y por aquellos que la apoyan en foros públicos están matizados hasta el punto de que puede dedicar un esfuerzo considerable para aprenderlos.

Ahora, tenga en cuenta que este comentario anterior es subjetivo y sesgado. Es posible que pruebe Perl y descubra que su sintaxis es intuitiva y agradable. Si es así, más poder para ti. Sin embargo, personalmente encuentro que mi comprensión de las idiosincrasias de Perl decae muy rápidamente. Los fundamentos que conservo, pero encuentro que es una lucha cada vez que tengo que volver a usarlo por más de unas pocas líneas de código.

Hay muchos otros idiomas que estudiaría, Java, Lisp y Scheme, TCL, Scala, etc. Sin embargo, sugeriría comenzar con uno que ofrezca el mejor equilibrio entre utilidad y simplicidad.

Jim Dennis
fuente
1

En el mundo Linux, debes saber dos cosas básicas:

  1. Regular Expression. Es un requisito. RegExes un "lenguaje" universal, una vez que sepa cómo usar la expresión regular, su vida será mucho más fácil :-)
  2. " quick & dirty" es muy común en el mundo Linux. Si puede hacer su trabajo, no importa cuán fea sea su solución, tiene su trabajo hecho.

Por lo tanto, si quieres aprender un idioma en Linux, DEBE elegir un script language, como python, PHPo incluso bash scripting.

Y, mi recomendación es PHP. Es simple y feo. Tiene un manual en línea detallado . Tiene buen RegExsoporte. Eso es todo.

yegle
fuente
2
Esa debe ser la mejor descripción de PHP que he escuchado ... Cuando eliminas la popularidad, no queda mucho: P
Gordon Gustafson
Un poco fuera de tema, pero creo que la razón principal de la popularidad de PHP es que muchas de las funciones que estarían dispersas en muchos enlazadores-biblioteca / paquetes en otros idiomas son estándar en PHP (un poco como agrupar la mayoría de las cosas que necesitará en libc)
Phil Lello
1

Puede realizar casi cualquier tarea en casi cualquier idioma, por lo que la elección correcta depende en gran medida del problema que esté resolviendo.

Definitivamente vale la pena conocer idiomas de las siguientes categorías:

  • Lenguajes compilados (como C / C ++ / Java). C / C ++ es un buen lugar para explorar problemas de seguridad con desbordamientos de búfer, corrupción de pila, etc.
  • Lenguajes interpretados (como PHP). Un buen lugar para explorar los problemas con variables de tipo libre y no detectar funciones indefinidas hasta que las llame
  • Lenguajes de script (sh / bash / csh / ksh). Realmente útil para pegar las muchas utilidades de shell útiles (ver / bin y / usr / bin) juntas

Me esforzaría por aprender C / C ++, ya que esto permite la corrupción de la pila y el acceso directo a la memoria. Esto es importante si desea experimentar con problemas de seguridad. Muchos lenguajes tienen una sintaxis tipo C (incluido JavaScript), por lo que es un buen trampolín.

Si está trabajando mucho en un shell, lo que supongo que es mientras aprende vim, terminará aprendiendo scripts básicos de shell como efecto secundario. UNIX Power Tools fue un buen libro para aprender cosas más avanzadas; No sé si aún está publicado.

PHP también puede ser un buen lenguaje para aprender; La principal ventaja que ofrece a los nuevos programadores es que se incorpora una gran cantidad de funcionalidades, en lugar de en una biblioteca a la que tendrías que vincular (lo cual no es una tarea compleja). Debido a esto, navegar por los documentos principales te enseñará sobre muchas cosas.

Phil Lello
fuente
1

Primero, algunos consejos negativos:

Básicamente, lo que planeo hacer es aprender a programar al mismo tiempo que aprender a usar Vim.

No hagas eso. Encuentre un editor que sea realmente cómodo. Aprender tanto el idioma como el editor es tres veces más difícil que aprenderlos en orden (obviamente, el editor debe ir primero :-))

Como dije, voy a entrar en la seguridad, por lo que crearé principalmente aplicaciones relacionadas con la seguridad. La mayoría de los cuales estarán relacionados con las redes.

¿Aplicaciones de seguridad relacionadas con redes? C es una elección obvia aquí. Deberá acceder a la red en el nivel API del sistema, lo que significa que C es el camino a seguir. Por supuesto, esto no significa que todo deba estar en C: una biblioteca de C + un $favorite-high-level-languagecontenedor podría ahorrarle las molestias relacionadas con C en partes que no necesitan C.

Dicho esto, tengo algunas ideas. Estaba pensando en comenzar con JavaScript, porque es multiplataforma, y ​​lo he visto sugerido antes.

Apuesto a que fue sugerido en un contexto diferente al tuyo. JavaScript tiene sus puntos fuertes, pero aún no es un buen lenguaje de propósito general. JS no tiene bibliotecas estándar comparables a las disponibles para C, Python, Perl, Ruby, Java y compañía.

Hablando de eso $favorite-high-level-language, mi consejo es ir con Python. Se interconecta muy bien con C, se entrega con muchas bibliotecas útiles y tiene muchas más bibliotecas disponibles como complementos.

Rafał Dowgird
fuente
0

No hay nada de malo en aprender Javascript, pero solo se ejecuta en un navegador, por lo que su programación se limitará a las aplicaciones relacionadas con la página web.

Probablemente hay tantas respuestas a "cuál es un buen lenguaje de programación para comenzar" como idiomas. Mi valor de tuppence es que podría hacer algo peor que comenzar con un script de shell básico, solo ver lo que puede hacer para automatizar tareas sin usar nada más allá del shell, luego extender eso usando Perl, o un lenguaje similar que surgió de la necesidad de hacer tareas más complejas de las que es capaz el shell, después de eso, y si está realmente interesado, solo tomará unas pocas semanas, comience a usar C o un derivado.

blankabout
fuente
3
¿Solo en navegadores? Ya no más .
EEAA
Gracias, estoy corregido, pero todavía no recomendaría Javascript como entorno de aprendizaje, para un principiante, obtener soporte para versiones que no sean del navegador sería una pesadilla.
blankabout
2
Siempre pensé que ECMAScript es el lenguaje de programación y Javascipt se sienta encima de ECMAScript para proporcionar funciones útiles para manipular el DOM. Javascript es para el navegador.
Jonathan Mayhak
0

Mis recomendaciones Hmmm Bueno, puede que tenga que decidir sobre la marcha. Para el rango completo y completo, puede seguir la ruta habitual de grado CS, tal vez no en este orden.

(1) C / C ++: puede obtener las cosas orientadas a objetos, y al menos lo habrá intentado. C ++ es el estándar 'profesional'. (2) Ensamblaje (solo por un momento, lo ayudará a comprender el funcionamiento real del procesador, la memoria, etc., no tiene que casarse con él). (3) Python / Perl / Bash - Obtenga estos con los lenguajes de scripting reducidos, serán más útiles para su nivel de Linux (4) PHP / Ruby, MySQL y HTML. ¡Simplemente inicie su programación web! Entenderá todo el proceso de interacción servidor-cliente, otro nivel de computación.

¿Necesitas conceptos útiles? AI, redes neuronales. Estos deberían redondearlo.

Puede elegir uno de estos para hacer o tocar todos. ¿Mi idioma? Todos ellos, según sea necesario, pero he estado programando desde 1984 y tengo un título de CS, juegos escritos y todo tipo de aplicaciones de sistemas integrados. Es lo que hago. Necesitas saber quién eres y qué haces. Solo asegúrate de divertirte.

¡Disfrutar!

Scott Foulk
fuente
0

¡Uy !, seguridad de la información errónea para los sistemas de información ... bueno, la mayor parte de esto todavía se aplica

Java

  1. Debe haber un curso de programación de nivel de entrada basado en Java que contará para su título. Siempre es bueno obtener créditos por las cosas que estás aprendiendo.
  2. Le dará un poco de crecimiento profesional si se cansa de ser estrictamente un experto en sistemas ... o si la empresa en la que trabaja más tarde decide que los sistemas son como tostadoras y también lo son las personas que los dirigen.
  3. Orientado a objetos
  4. Dijiste que querías hacer algo de desarrollo de Android. Eso va a significar Java.

Honestamente, si está trabajando en Linux y toma un curso de programación inicial en Java, y luego puede seguir con un par de cursos de programación más, las otras herramientas como Bash sed / awk, etc., deberían encajar. Si realmente te metes en los sistemas, podrías tomar algo de C más tarde, pero no diría que tiene una gran demanda y ni siquiera diría que es un requisito para ser un tipo de sistemas, a menos que realmente te interesen las partes internas.

YMMV

MLH
fuente