Como desarrollador, ¿cómo puede crear cualquier proyecto que se le ocurra, como una aplicación móvil o un sitio web? ¿Cómo lo resuelves?

Al igual que cualquier otra aplicación (incluso si no es un desarrollador), comienza con su propuesta de valor central y desarrolla lo que sus usuarios desean y atraerá a más usuarios para que llamen la suya propia. No es suficiente “desarrollar una aplicación”, debe cultivar una experiencia que mantenga la atención de las personas (que actualmente está cayendo en picada y es señal de que estamos menos atentos que los peces de colores).

Digamos que desea desarrollar una aplicación “como Facebook”, no solo va a clonarla, eso le costaría millones (10 de millones) y llevará años. Entonces, sus usuarios simplemente no vendrán porque están conectados a Facebook. Por otro lado, si tiene algunas arrugas en Facebook que no se abordan, supongamos que desea dejar que las personas hagan UN aspecto de Facebook con una mejor experiencia y comiencen a desarrollar eso.

Desea desarrollar un mejor mercado que ellos o Amazon. La característica principal es lograr que los amigos de las personas recomienden productos o servicios. Por lo tanto, desea brindar a las personas una mejor experiencia de tipo “intercambio de intercambio” que se base (de alguna manera) en el hecho de la amistad. Entonces comienzas por el principio.

Entonces, decide que necesita iniciar sesión, pero ¿de qué tipo?

Puede tener uno genérico con solo correo electrónico y contraseña (para privacidad) o puede agregar inicio de sesión de FB, contactos de números de teléfono, flujo de inicio de sesión de Twitter y muchas otras opciones. Para un MVP, necesita desarrollar el más simple normalmente, por lo que debe ir con un inicio de sesión genérico con Nombre, Nombre de usuario, correo electrónico y contraseña.

Luego, vaya a una fuente (o escríbalo usted mismo) para encontrar lo que se llama código de software de “código abierto”, o los servicios que está utilizando para su base de datos (otra opción para tomar) a veces le darán un buen comienzo sobre cómo implementar esto parte del desarrollo.

Entonces, encuentra algo o escribe algo que supuestamente debe registrar los atributos del usuario en su base de datos para que pueda usarlos para sus propósitos más adelante. Si está funcionando y todo está listo, debe decidir cómo se vería su pantalla principal y comenzar a desarrollar el aspecto y luego implementar toda la funcionalidad, como botones, menús, sus enlaces y páginas asociadas, etc. Si desea una fuente de noticias, por ejemplo, necesita desarrollar la “reunión de intercambio” real antes de esta pantalla y luego colocar algunas publicaciones decididas por algoritmos en las fuentes de los usuarios.

He hecho amplias generalizaciones, pero ya ves cómo va, simplemente construyes un producto lentamente. De hecho, el producto que termine funcionando probablemente sea algo que nunca haya considerado. Slack comenzó como un juego multijugador masivo (lo que sea que eso signifique), Facebook no tenía suministro de noticias (y fue inicialmente rechazado), y muchos otros ejemplos. Al final, nunca sabes lo que realmente estás construyendo, solo tienes una buena idea de que estás persiguiendo y esperando que otros estén de acuerdo en que es increíble y únete a tu comunidad en tu aplicación y, lo que es más importante (por razones de viralidad), ¡trae amigos!

Este es el proceso que ocurre, no es bonito, ni es una respuesta simple.

(La membresía de desarrollo de aplicaciones de $ 495 / m que tenemos fue desarrollada para brindarle a los expertos que necesita un salario manejable y eso le brinda control total sobre los presupuestos de desarrollo)

Si desea ver algunas conferencias de expertos, Startup School fue una experiencia enriquecedora y los materiales están abiertos al público

Escuela de inicio

Mi parte obligatoria de este video (sobre ser propietario de un producto, qué miembros de nuestra membresía son y no desarrollados por nuestro equipo)

¡Fácil!

Es broma, bueno, más o menos. Mi proceso es el siguiente, utilizando mi proyecto paralelo actual para demostrar mi flujo de trabajo. Después de algunas noches o, a veces, una semana de pirateo, normalmente puedo tener un MVP simple ejecutándose con este proceso:

Un poco de historia de mi proyecto paralelo actual: Hace poco comencé a trabajar en mi propia aplicación de facturación usando React / Redux en el front-end y Slim PHP para la API.

Se me ocurrió la idea después de haber olvidado las facturas que había enviado y si se habían pagado o no. Soy consciente de FreshBooks y similares, pero me gusta jugar con ideas y ver hasta dónde puedo llegar para implementar mi propia solución.

Mi proceso:

Uno de mis primeros pasos, aunque no es necesario (solo una preferencia), es crear un nombre genial:

Factura.

Factura.

En. Voz.

Hablo español, así que decidí traducir literalmente In (En) y Voice (Voz):

Envoz

Y así, nace una startup. A veces también diseño el logotipo, otras veces solo uso una fuente sans-serif moderna y lo llamo un día.

A continuación, escribo muchas ideas e incluso empiezo a diseñar algunos conceptos sobre cómo creo que la aplicación web debería sentirse y funcionar, a menudo con varias vistas. Esto ayuda a solidificar algunas de mis ideas:

Después de este paso, empiezo a pensar en mi capa de datos; los tipos de objetos que necesitará mi aplicación junto con sus propiedades y métodos. Por ejemplo, un ejemplo de modelos que puedo tener:

Modelo de usuario

  • tiene correo electrónico
  • tiene nombre de usuario
  • tiene una foto
  • tiene una empresa
  • puede crear facturas
  • puede compartir facturas

Modelo de empresa

• tiene un nombre

• tiene un administrador

• tiene un logo genial

Puede continuar para siempre en este paso, pero me gusta mantenerlo simple y centrarme en lo que mi MVP deberá lograr. (Esto a menudo pasa por varias iteraciones)

Comienza la codificación

Una vez que mis modelos son viables, empiezo a crear mis tablas SQL y a crear claves foráneas para mapear las relaciones de mis modelos. (Esto también pasa por muchas iteraciones)

Una vez que tengo la configuración de mi base de datos, creo algunos puntos finales REST simples usando Slim PHP y Eloquent, y hago todas mis solicitudes iniciales con Postman. Hago esto localmente, pero uso una base de datos alojada en mi hosting MediaTemple. Esto facilita trabajar en diferentes computadoras.

I itero a través de mi API, construyendo puntos finales para la mayoría de las características que necesito, así como toda esa plantilla CRUD. Realmente ayuda a comprender cómo funciona HTTP, como las solicitudes POST y GET, porque básicamente puedo escribir mi API sin muchas pruebas y sé que funcionará en su mayor parte.

Si necesito usar un tercero, por ejemplo, Amazon S3 para el almacenamiento de imágenes o Amazon SES para la automatización del correo electrónico, continúo implementando lo que sea necesario y finalmente me integro con mi API. (Esto puede llevar algunas horas o unos días, dependiendo de la complejidad, y si es algo que nunca he hecho antes)

Mi último paso, aunque no es realmente el último, es crear un cliente React para interactuar con mi API. Normalmente uso JWT para la autenticación, por lo que tengo una placa repetitiva para mi backend y mi front-end que permite un andamiaje rápido.

¡Después de algunas noches de semana escribiendo componentes, rutas y estados redux, puedo tener una aplicación semi-funcional!

Obviamente, lleva semanas y, a veces, incluso meses antes de tener un MVP completamente funcional con el que estoy feliz. Pero este paso es principalmente solo iteraciones y más iteraciones, perfeccionando mis diseños y animaciones CSS, optimizando el flujo de usuarios y haciendo que la aplicación sea lo más fácil posible.

A veces tengo que reescribir partes de mi API porque no pensé completamente en una funcionalidad o modelo, ¡pero generalmente es una solución rápida!

Aunque honestamente

Probablemente mi proceso no sea ideal, ¡pero funciona para mí! Me permite experimentar con ideas rápidamente, muchas veces invalidándolas rápidamente jaja.

Crear algo de la nada es una de las partes hermosas de la programación. Al igual que escribir música o pintar, literalmente toma ideas y las formula en algo tangible con el que las personas pueden interactuar. Puede ser un sentimiento bastante gratificante. En Touchtap nos enorgullecemos de crear aplicaciones que crean una experiencia de usuario única.

Entonces, ¿Cómo lo hacemos?

Para empezar, hay mucho café y pizarras blancas. No puedo enfatizar lo suficiente lo importante que es la fase de planificación para cualquier proyecto, pero especialmente en el desarrollo de software / aplicaciones. Nos reunimos varias veces hablando de cada aspecto de la aplicación, mapeándolo en una pizarra y discutiendo el camino que seguirá un usuario cuando lo use.

Una vez que tenemos un plan de proyecto trazado, comenzamos a dividir las tareas en nuestros diferentes equipos. Diferentes equipos juegan diferentes roles en el desarrollo de una aplicación. Cuando el código comienza a unirse, las piezas del rompecabezas comienzan a funcionar. Muchas pruebas y QA ocurren en estas etapas. Una y otra vez intentas encontrar errores y, en última instancia, usas la aplicación como la usaría un usuario final.

Desea asegurarse de que la experiencia de usarlo sea agradable y se explique por sí misma.

Finalmente lo publicas y esperas comentarios. Este es un nivel MUY alto, pero como puede ver, desarrollar una aplicación es similar a casi cualquier proyecto que realice. Usted planifica, trabaja, modifica y libera.

Descomponerlo.

Esta es la habilidad número uno que un desarrollador necesita tener, debe ser capaz de tomar un problema y dividirlo en sus componentes.

Una aplicación móvil no es un gran desafío, son 1000 pequeñas.

Tomemos un juego simple como Candy Crush como ejemplo.

Elimine los gráficos elegantes y obtendrá una cuadrícula de 9 × 9, con diferentes valores en esos “agujeros” de la cuadrícula.

En programación, eso se puede representar fácilmente mediante una matriz bidimensional.

¿Se puede crear una matriz bidimensional?

¿Se puede llenar con valores aleatorios entre digamos, 0-5? Esos son los diferentes tipos de ‘dulces’.

¿Puedes representar esa matriz 2D en la pantalla, simplemente harán diferentes colores?

Estos son los pequeños problemas en los que lo hemos dividido, pero sigamos adelante, hagamos esos problemas pequeños

¿Se puede crear una matriz bidimensional?

Bueno, podemos crear 1 matriz con bastante facilidad, ¿podemos crear 9? Si no hay problema.

¿Podemos reventar esas 9 matrices en otra matriz? Todavía bastante simple, OK, ¡tenemos nuestra matriz 2D!

Así es como se hace, así es como creamos aplicaciones, no es un gran trabajo, son 1000 pequeñas.

En muchas de mis respuestas, siempre hablo sobre la importancia de escribir software en realidad. Una vez que tenga los conceptos básicos, debe escribir aplicaciones, así es como aprende la habilidad de resolver un problema.

Primero, comience con el problema; ¿Que problema estas tratando de resolver? Si está creando una aplicación que resuelve un problema recurrente para una población significativa de usuarios, entonces está creando una aplicación que no solo importa, sino que será pegajosa y verá un uso repetido. Por ejemplo, encontrar una niñera es un problema recurrente para una gran población de usuarios, por lo que no solo es un problema que vale la pena resolver, sino que debe resolverse repetidamente.

En segundo lugar, ha descubierto cómo desea que funcione el sitio web o la aplicación web. No se preocupe demasiado por los colores o gráficos reales en este momento; solo concéntrate en la funcionalidad. Puede configurar una estructura alámbrica de pantallas. Por ejemplo, cuando el usuario inicia sesión en la aplicación, esto es lo que ve primero; luego, cuando hacen clic en algún botón, van a alguna pantalla, etc. Los wireframes son simplemente esquemas, una especie de esqueleto que puedes desarrollar más adelante.

En tercer lugar, debe averiguar cómo se gestionarán los datos que alimentan su sitio web o aplicación web. ¿Qué formato de base de datos funciona mejor [SQL o NoSQL]? ¿Cómo se alojará [autohospedado o nube administrada]? ¿Necesita almacenar en caché algunos datos localmente para permitir que la aplicación web funcione sin conexión? ¿Qué partes del sitio web o aplicación web deben actualizarse a medida que se actualizan los datos?

En cuarto lugar, puedes construir un prototipo simple. Una vez más, no se centre demasiado en los colores y los gráficos [podría ser monocromo en este punto], solo cree algo que sea funcional y asegúrese de que funcione como está diseñado. Además, no te excedas con frameworks si no tienes la experiencia; simplemente construya algo usando HTML, CSS y JavaScript + mínimo del lado del servidor [Node.js, PHP, etc.].

Finalmente, una vez que haya creado el prototipo y lo haya probado lo suficiente como para resolver todos los problemas principales, ahora puede comenzar a desarrollarlo con gráficos y estilos más impresionantes. Dado que lo ha creado con HTML, CSS y JavaScript, puede habilitarlo fácilmente para que se convierta en una aplicación web progresiva. Además, también tiene una ruta de acceso nativa utilizando marcos como Ionic o Phonegap para que sea una aplicación nativa que se pueda alojar en tiendas de aplicaciones para iOS y Android.

Todo doblado, solo intenta y toma las cosas paso a paso. No se sienta abrumado por la empresa; divídalo todo en pedazos pequeños y tómelos uno tras otro.

La respuesta corta es sí.

Para mí, hay dos factores para que un gran proyecto tenga éxito. La primera es la idea, y la segunda es la ejecución. Ahora, la ejecución no solo significa crear la aplicación, sino también publicitarla y promoverla. En otras palabras, todo lo que haces para que sea exitoso.

Ahora, la implementación técnica es solo una parte de la ejecución. Y, para una base de usuarios limitada, probablemente será fácil. Si crece a millones de usuarios, entonces puede enfrentar varios desafíos técnicos, y necesitará desarrolladores realmente buenos. Si ese es el caso, entonces su aplicación ya es exitosa.

Pero no diría que las limitaciones técnicas son limitantes para una nueva aplicación o software.

Y gracias por la solicitud, Hossam Rakha.

Juego con nuevas tecnologías o pienso en nuevos desafíos para resolver la automatización.

Hoy, me di cuenta de que no había trabajado con la especificación de audio HTML5 en un tiempo, y activé el lápiz de código y comencé a desarrollar mis ideas. Una vez que la interfaz de usuario fue estable, dije en el JS.

Detenido en un punto en el que me di cuenta, esto podría ser más que solo ejercicio, intentemos algo más duro, así que acepté el desafío y comencé a incorporarlo a Electron + React + Webpack para una construcción local completa con pruebas a través de Chai y enzimas.

La cuestión es que, a veces, el conocimiento de conocimientos antiguos lo reta a explorar nuevas rutas. No siempre se trata de la nueva idea, de usar lo que sabes para avanzar más. Un día es todo lo que se necesita para pasar de un ejemplo de codepen para progresar en un nuevo marco como Electron. 🙂

Eso es lo que es la programación: analizar la situación, llegar a algunas soluciones, analizar las soluciones para decidir cuál es la mejor … luego codificar la que eligió, que es solo alrededor del 5% del esfuerzo, el otro 95% es el análisis, y si no comienza a ver las soluciones en el problema, no es analítico y probablemente no se convertirá en un buen programador.

Ser analítico no es algo que aprendes, más que ser alto es algo que aprendes, son genéticos góticos. Las personas de baja estatura no deberían tratar de convertirse en jugadores profesionales de baloncesto y las personas no analíticas no deberían tratar de convertirse en programadores. el resultado final es el mismo en ambos casos: frustración por no poder hacerlo bien.

No puedo crear “ningún proyecto que se me ocurra”. Realmente solo puedo dar pequeños pasos construyendo sobre lo que sé. Es como escalar en hielo. Sí, puedo escalar, pero es lento y metódico, y el progreso puede ser doloroso y puede parecer ridículo para cualquiera que mire desde el suelo. Hay muchas montañas que ni siquiera intento. Reflexiono sobre las cosas, trabajo en ello por un tiempo, luego decido que lo hice mal y necesito volver a trabajar o comenzar de nuevo.

Enumere los recursos, los obstáculos, el mercado y sus clientes, puede tomar la decisión fácilmente.