Gestión del tiempo sin horarios estrictos, experiencia en el desarrollo de una aplicación móvil.

Planificación del tiempo, control, aumento de la eficiencia. El tema está trillado, pero me atrevo a ofrecer otra solución.


Todavía no he podido encontrar ningún método universal para administrar mi tiempo que se adapte a todos. Como regla general, todos eligen por sí mismos las prácticas que mejor se adaptan a él. Y esto está relacionado no solo con las características del personaje, sino también con las características del trabajo.

Para mí es así: me preparé, me sintonicé, me puse a trabajar y luego - "o el sello llamará, luego el venado". Al final del día, existe la sensación general de que no está claro qué estaba haciendo y cuál fue el resultado.

Una vez que surgió una idea: "Eso sería genial, te llamaron y eres como en un juego de ajedrez Presioné el botón y detuve el tiempo de trabajo, volví al trabajo, presioné otro botón. Como resultado, obtendrá cuánto trabajó y cuánto descansó ". Llamé a este enfoque: gestión del tiempo de ajedrez o ChessTM para abreviar.

No es difícil adivinar que la idea se amplió inmediatamente a la idea de tener un botón para cada tarea durante el día. Y luego todo esto se transformó en el concepto de gestión del tiempo.

Concepto


El tiempo no puede ser detenido. Siempre pasamos nuestro tiempo. Y si estamos haciendo algo con uno, entonces, obviamente, no puede hacer otra cosa simultáneamente con eficiencia constante. En cualquier momento, se realiza algún tipo de actividad: trabajar en una tarea, practicar deportes, caminar, hacer ejercicio, comer, dormir, etc.

Postulado número 1


Para controlar la necesidad de gestión del tiempo. Para administrar el tiempo necesita poder controlarlo. Principio: con solo tocar un botón (literalmente, no metafóricamente), seleccionamos la actividad actual y el tiempo para la actividad anterior se detiene automáticamente y comienza a contar para la actividad actual.

Postulado número 2


La gestión requiere planificación. Para administrar el tiempo, debe poder planificarlo. En cualquier momento, tenemos un grupo común de tareas y algunos asuntos urgentes. Cuando trabajamos en una tarea o presionamos asuntos, cometemos una actividad. La planificación es que asumimos en qué actividades participaremos. Una comprensión tradicional del plan implica una secuencia fija de acciones. A menudo es muy difícil observar una secuencia fija, a veces debido a objetivos, y a veces no muy buenas razones. La desviación del plan lo pone nervioso y reduce la eficiencia del trabajo. Percibimos el descanso como la ociosidad, surge un sentimiento de culpa, disminuye la eficiencia del trabajo y disminuye la satisfacción. Para evitar los problemas descritos, no planificaremos la secuencia de varios tipos de clases, sino el tiempo asignado para actividades durante el día.
Puedes planificar en minutos. Es decir, el proceso de planificación se ve así: seleccionamos las tareas para el día del grupo general y establecemos el tiempo planificado para ellas, que vamos a gastar en ellas.

Postulado número 3


El tiempo administrado significa que el plan converge con la realidad. Por supuesto, algo puede cambiar durante el día. Y tal vez resulta que el plan diverge de la realidad. Deje que el tiempo planeado para la actividad Tp (tiempo planificado), el tiempo realmente dedicado a la actividad Tr (tiempo real), la diferencia entre estos tiempos se llame coeficiente de diferencia Td (tiempo delta). Consideramos que la calidad de planificación Qp (calidad de planificación) es el porcentaje de las sumas de todos los coeficientes de discrepancia a la suma del tiempo total planificado, que restamos de cien.

Qp=100% frac(Td1+Td2+ ldots+Tdi+ ldots+Tdn)(Tp1+Tp2+ ldots+Tpi+ ldots+Tpn)100%

es decir, resulta que con coeficientes de divergencia cero, la calidad de planificación será del 100%.

Aplicación de Android


Este artículo no habría aparecido si no hubiera decidido implementar una herramienta para este concepto. Quiero compartir esta experiencia

Entonces

Aplicación ChessTM implementada.

Implementación en las tardes y fines de semana en su tiempo libre. Trabajo como administrador de versiones y el trabajo con el desarrollo de Android no está conectado de ninguna manera.

Funciones:

  1. Crear un grupo de tareas
  2. Planeando tiempo para tareas para cada día
  3. Transfiere el plan del día anterior
  4. Fácil cambio de tareas
  5. Estadísticas

    • tiempo total empleado en relación con el plan total, por un período arbitrario por sectores de vida
    • informar sobre tareas, cuánto se planifica para cada tarea y cuánto se gasta realmente
    • estadísticas sobre el cambio entre tareas y sobre el factor de calidad de planificación para el período
  6. Distribución de tareas por sectores de vida (trabajo, familia, amigos, etc.) y etiquetas

La idea principal era hacer una mecánica de interacción con la aplicación para hacer lo menos posible. Para que todo sea fácil y simple, con un solo clic.

Se implementa de la siguiente manera: hay una pantalla y tres pestañas entre las que puede navegar por saip:

  • grupo de tareas donde hay todas las tareas que están actualmente disponibles;
  • plan diario, donde se establece el tiempo programado para las tareas;
  • control, donde cambiamos de tarea a tarea y contamos el tiempo.


A continuación, me gustaría centrarme en los momentos del desarrollo en sí. Espero que mi experiencia sea útil para los desarrolladores novatos, y los gurús probablemente le dirán qué se puede mejorar en el proceso de organización del desarrollo.

Infraestructura de desarrollo


Quería hacer el desarrollo correctamente de inmediato. Para que fuera algo duradero, no mimado y abandonado. Por lo tanto, quería organizar una infraestructura holística, que incluyera:

  • IDE (Entorno de desarrollo integrado);
  • repositorio de almacenamiento de código;
  • rastreador de tareas;
  • Documentación
  • prueba

IDE


AndroidStudio, aunque alguien puede discutir, pero en mi opinión, con toda la riqueza de elección, no hay otra alternativa. Hay muchas pautas sobre cómo poner, cómo comenzar, cómo registrar un desarrollador, etc. En mi opinión, todo es bastante simple aquí, sin consejos especiales, solo tómalo y hazlo prácticamente de acuerdo con las instrucciones.

Almacenamiento de código


Git fue elegido como el sistema de almacenamiento de código.

Los criterios de selección son simples: un sistema moderno popular, tiene una gran comunidad de desarrolladores, muchos recursos con buena documentación. Como puede ver, los criterios no son completamente técnicos, pero cuando es un desarrollador novato, la comunidad y muchas respuestas a stackoverflow son una gran ventaja.

Se eligió Bitbucket como almacenamiento remoto:

  • sin cargo;
  • le permite crear repositorios privados y abiertos;
  • le permite crear un equipo para trabajar con diferentes niveles de derechos de acceso;
  • tiene su propio rastreador de tareas simple.

Rastreador de tareas


Es decir, la elección de bitbucket también da la presencia de un rastreador de tareas. A primera vista, puede parecer que cuando escribe la aplicación usted mismo, el rastreador de tareas no es necesario, pero es un error pensar que sí. El rastreador de tareas se organiza. Te permite hacer planes. Y en caso de que alguien más se conecte al proyecto, no habrá necesidad de buscar nada, pero con el desarrollo conjunto sin un rastreador de tareas, nada. Sí, el rastreador en Bitbucket no es perfecto, pero cierra los problemas principales en una primera aproximación.

Documentación


Para la documentación decidió utilizar readthedocs.io:

  • sistema gratuito que le permite publicar documentación en formato Sphinx ;
  • se integra con bitbucket (y muchos otros), es decir, puede almacenar fuentes de documentación en bitbucket y se recopilará automáticamente en cada confirmación, puede decir integración continua para la documentación; esto es extremadamente conveniente;

Desafortunadamente, la documentación no es completamente cierta ahora. Pero en ese momento, su escritura fue de gran beneficio. Por lo tanto, recomiendo escribir documentación a todos los que inicien su proyecto; esto pone sus pensamientos en orden y aclara la visión del proyecto.

Prueba


Las pruebas son un gran tema y puedes encontrar muchos materiales sobre este tema.

Tengo un nivel de modelo en la aplicación donde se realizan todas las matemáticas y cálculos.
Por lo tanto, decidí concentrarme en probar este módulo de software en particular.

Para esto uso JUnit4 . Las pruebas se ejecutan en el dispositivo.

Las pruebas son pruebas unitarias de la clase principal del modelo.

Se crea un conjunto de datos de prueba y, en consecuencia, todas las funciones de la clase de modelo se invocan con un resultado conocido.

Por experiencia puedo decir lo siguiente:

  • las pruebas son muy útiles para atrapar la regresión;
  • a veces, los errores de diseño / arquitectura salen a la luz cuando comienzas a usar las funciones tú mismo, la cabeza comienza a funcionar de manera un poco diferente cuando usas la función, incluso si la escribiste tú mismo;
  • mantenga las pruebas actualizadas, ahora lamento no haberlo hecho, porque el volumen de la aplicación ya es bastante grande y no todos los detalles se pueden guardar en la memoria, y lamentablemente entra en producción alguna regresión que se puede detectar en la etapa de prueba de la unidad. Entonces, con una perseverancia obstinada y aburrida, "¡mantén las pruebas actualizadas!"

Arquitectura e implementacion


La esencia de esta sección es hablar sobre qué aprender para un principiante para poder implementar funciones como en esta aplicación.

Al comienzo del viaje, el principal problema era que no estaba claro por dónde empezar y en qué dirección pensar. Cómo hacerlo y cómo hacerlo mal.

Para principiantes, recomiendo comenzar con un libro. El libro es bueno porque la información está sistematizada en él, y es mucho más fácil comenzar de esta manera.

Personalmente, comencé con "Programación para Android. Para profesionales ”B. Hardy, B. Phillips. En general, puedo recomendarlo. Quizás ahora esté desactualizado en algunos lugares, pero es bastante posible comenzar.

También puedo recomendar escuchar varios podcasts en la programación de Android. Por supuesto, no todo está claro en ellos, pero puede captar las tendencias y comprender qué camino tomar. En particular, ocasionalmente escucho androiddev en apptractor .

En cuanto a la arquitectura en sí, traté de implementar un enfoque en el que la lógica interna se separe al máximo de la pantalla. El hecho es que en la etapa inicial, no todo está completamente pensado y es necesario poder cambiar la "matemática" (lógica de trabajo) sin reescribir todo el código.

Por ejemplo, en mi aplicación, la esencia principal es la "actividad" en términos de tarea / actividad. Y toda la lógica del trabajo son las manipulaciones con actividades: actividad inicial, actividad final, establecer parámetros de actividad, calcular estadísticas de intervalos de tiempo, etc. Esta lógica que hice

en una estructura de clase separada


La lista de tareas está contenida dentro de la clase ActionsManager y todo el acceso a ellas se realiza a través de las funciones de esta clase. Es decir, en todas partes de la aplicación, todas las manipulaciones con tareas se realizan a través de la clase ActionsManager.

El objeto de la base de datos se inicializa en el objeto de la aplicación. Todos los demás toman el objeto desde aquí, en lugar de crear uno nuevo cada vez.

Aquí puedo dar esos consejos: tome la lógica en clases separadas. Lea sobre los patrones de diseño: no es necesario inventar una bicicleta donde ya hay una solución.

La GUI se basa en ActionBarDrawerToggle. Al principio, se usó ActionBarSherlock , por supuesto, no es malo para todos, pero luego tuve problemas con la compatibilidad con otros componentes y cambié a componentes estándar de Google (menús, pestañas, listas con carga de datos dinámicos, etc.).

En el proceso de conciencia de la aplicación, además de los componentes estándar de Android se utilizaron:

  • implementación de sus métodos de manejo de eventos de barra de búsqueda;
  • implementación de longclick mediante evento táctil, ya que el longclick nativo no puede verse obligado a trabajar de acuerdo con sus necesidades;
  • MPAndroidChart : creación de gráficos y cuadros;
  • com.roomorama: caldroid : muestra un calendario por mes;
  • com.github.paolorotolo: appintro : creación de un asistente de inicio.

Monetización


  • La aplicación en sí es completamente gratuita y sin anuncios.
  • Está previsto agregar varias opciones pagas con el tiempo.
  • Por el momento, este es un módulo de estadísticas sin restricciones.
  • Se pueden ver todas las estadísticas del día actual, pero para hacerlo durante un período de tiempo arbitrario, debe comprar el módulo sin restricciones.
  • Al final resultó que, ahora con la cuenta del vendedor, todo se ha vuelto mucho más fácil.
  • En mi caso, hay una cuenta en una caja de ahorros, abrí una cuenta en dólares a través de una caja de ahorros en línea y la vinculé a mi cuenta; todo es muy simple. Y sí, una buena característica, por algún tiempo Google ha estado transfiriendo dinero desde $ 1.

PD:
Finalmente, un mensaje para todos los principiantes, o para aquellos que quieren comenzar: no tengan miedo de las dificultades, no tengan miedo, gradualmente, paso a paso, ¡tendrán éxito!

Source: https://habr.com/ru/post/es429490/


All Articles