AH … esta pregunta. Lo he esperado por tanto tiempo …
Sabes qué, esta cosa única es el mayor obstáculo que impide que la mayoría de los novatos se conviertan en mejores programadores. Cómo pensar en términos de una máquina; ¿Cómo traducir un problema cotidiano dado en una secuencia de pasos lógicos que podrían ser entendidos y ejecutados por una computadora? Una vez que empiezas a pensar así, comienzas a resolver problemas rápidamente.
Hay varias cosas que puede / debe hacer para mejorar su capacidad de pensar en términos de una máquina. Recomiendo lo siguiente (un poco de antecedentes al principio, pero sigue leyendo):
- ¿Cuáles son los monitores beset 144 Hz?
- ¿Cómo debería AMD ganar impulso con Ryzen?
- Tengo una PC de arranque dual con W7 (desde un disco) y W10 (descargado). Me gustaría mover W10 a un nuevo HDD. ¿Hay alguna manera de hacerlo sin un disco?
- ¿Cuál es la computadora portátil más reciente y más barata que se puede ejecutar en Linux?
- ¿Cuáles son las deficiencias de las computadoras portátiles ASUS?
- Comprender el hecho de que las computadoras no pueden / no pueden pensar ; ellos solo ejecutan . Ejecutan una serie de instrucciones atómicas que, si se ordenan correctamente, generan los resultados requeridos. Por lo tanto, cualquier tarea debe traducirse en una secuencia de pasos.
- El punto básico es que estos componentes no son inteligentes. Simplemente están diseñados de una manera que los obliga a generar una salida particular para una entrada particular. Permítame darle un ejemplo mínimo: cuando presiona el botón del interruptor, la bombilla se enciende. Ni el interruptor ni la bombilla necesitan decidir o pensar en nada en todo el proceso. La circuitería entre el interruptor y la bombilla es por diseño de tal manera que al colocar el interruptor en la posición ON permitiría que la corriente fluya hacia la bombilla. Básicamente de la misma manera, el procesador de la máquina se fabrica de manera que puede realizar ciertas operaciones matemáticas. Lea libros introductorios sobre lógica y diseño digital si desea obtener una comprensión más profunda de la forma en que funcionan los componentes de la computadora.
- Estas instrucciones atómicas son demasiado tediosas para que los humanos las entiendan. Afortunadamente para nosotros, existen lenguajes de programación de alto nivel que son más fáciles de leer y escribir para los humanos. Este lenguaje nos proporciona un conjunto de instrucciones no tan atómicas mediante las cuales podemos escribir la secuencia de pasos que resolverán nuestro problema. Estas instrucciones de nivel superior serán traducidas automáticamente a instrucciones atómicas de bajo nivel por los compiladores de idiomas para que la máquina las ejecute. Tenga en cuenta que incluso estos lenguajes de nivel superior son demasiado simples en comparación con los lenguajes humanos y ofrecen solo un puñado de construcciones que reunimos para escribir nuestras soluciones.
- Hay algunos sitios web que ofrecen juegos visuales que le enseñan a pensar en términos de ejecución secuencial. Uno de esos sitios es CodeMonkey que enseña a los niños y principiantes cómo lograr ciertos objetivos al dividirlos en trozos más pequeños, cada uno de los cuales podría ser realizado por su mono. (Descargo de responsabilidad: no estoy asociado con el sitio web de ninguna manera).
- Ahora que comprende por qué los idiomas necesitan un enfoque secuencial para resolver problemas, sigamos adelante. Como programador, su tarea principal (al principio) sería traducir un problema determinado en una secuencia de instrucciones de lenguaje para que la computadora pueda ejecutarlas y generar resultados. Para los principiantes, este es el punto donde deberían comenzar a aprender el pseudocódigo ; Una notación que se asemeja a un lenguaje de programación simplificado. No hay reglas estrictas para escribir pseudocódigo. Su objetivo principal es permitir a los programadores dividir un problema mayor en unidades más pequeñas, cada una de las cuales podría traducirse a un lenguaje de programación específico.
- Al escribir un pseudocódigo, la clave que debe tener en cuenta es que una máquina, al igual que el mono de su juego (ver # 4 arriba) solo puede realizar un conjunto atómico básico de operaciones. Además, quizás aún más importante, debe comprender que una máquina puede sumar, multiplicar o comparar solo dos números a la vez . Cuando entra un tercer número, debe mover al menos uno de los dos números existentes fuera de la tabla, a ubicaciones de memoria temporales. Esto es muy parecido al Juego de Sacerdotes y Demonios, donde debes llevar a 6 personas (3 hombres y 3 fantasmas) al otro lado del río usando un bote que puede llevar solo 2 personas a la vez. También debes tener cuidado de que los humanos nunca sean superados en número y, por lo tanto, comidos por los fantasmas a ambos lados del río. La solución requiere una secuencia particular de viajes en barco. Esta secuencia se conoce como algoritmo .
- Después de esto, comience a aprender algoritmos introductorios que incluyen ordenar, intercambiar, min / max, encontrar la edad usando d / o / birth, encontrar LCM y GCD de números, etc. Todos estos problemas ya se han resuelto, pero intente resolverlos usted mismo. sin consultar a nadie. Las cosas comenzarán a tener sentido para usted y su cerebro se acostumbrará a pensar en términos de pasos secuenciales.
- Comience a aprender algoritmos más complejos ahora, incluidos Dijkstra, Merge Sort, FFT, algoritmos de gráficos, etc. De especial importancia serían los algoritmos que se ejecutan en entornos de computación paralela / grid. Esto es así porque los procesadores ofrecen cada vez más núcleos y para aprovechar al máximo su potencia informática, debe escribir código que pueda ejecutarse en paralelo.
- Una vez que haya pasado algunos años escribiendo código y jugando con idiomas, bibliotecas y herramientas, descubrirá que la mayoría de los problemas algorítmicos elementales ya han sido resueltos y entregados a los programadores por proveedores que hicieron estos idiomas, y que usted no es necesario reinventar la rueda reescribiendo un programa que realice una ordenación por fusión. Quizás se pregunte por qué, ¿por qué en el mundo debería pasar su tiempo aprendiéndolos? La respuesta es que programar cualquier cosa requiere que piense en términos de algoritmos todo el tiempo, no solo cuando necesita resolver uno de los problemas conocidos. Por lo tanto, siempre es bueno para un programador poder traducir problemas dados en una lista secuencial de pasos.
- Después de muchos años más, estará en una posición de alto nivel en una compañía de software y ya no escribirá código diariamente. Estos algoritmos aún lo ayudarán a verificar el código de los miembros de su equipo y les ayudarán a escribir cosas mejores. En algún momento, alguien publicará una pregunta en Quora preguntando cómo pensar en términos de un programador de computadoras y ¡entonces podrás ayudarlo!
¡Feliz codificación!