139 lines
8.0 KiB
TeX
139 lines
8.0 KiB
TeX
\chapter{Summary}
|
|
|
|
In this chapter I am going to evaluate the state of the project and set future goals for
|
|
the framework.
|
|
I'll also try and reflect on some of the most important things I have learned during
|
|
working on it, in case I've experienced something that might be useful for
|
|
someone else reading this in the future.
|
|
|
|
\section{Project Evaluation}
|
|
|
|
How do we define if a project is a success or not?
|
|
Instead of attempting to do so, in this section I am going to express
|
|
my personal feelings and opinions about the Tutorial Framework.
|
|
To get unbiased opinions I'd recommend asking someone who hasn't been maintaining
|
|
this project for so long.
|
|
I could promise to be as objective as possible, but I think that it is just better to
|
|
be honest and admit that I have a sweet spot for this project.
|
|
|
|
Currently a total of 63 tutorials based on the framework are running in production,
|
|
with new ones being released on a weekly basis.
|
|
These exercises have been solved several hundreds of times.
|
|
User feedback is getting better and better as the project moves forward.
|
|
As a maintainer, currently I know about a single unfixed bug in the framework, which
|
|
is getting reported by users as well.
|
|
There are more, of course, the world is never going to run out of bugs to fix,
|
|
but at least I sleep well knowing that things aren't breaking on a constant basis.
|
|
Considering that this is a one-year-old project including initial development,
|
|
I'd consider this a solid success.
|
|
|
|
We were able to achieve most --- if not all --- of the goals we have envisioned on the
|
|
beginning of this journey, and considering some of the things we have planned for the future
|
|
we are just getting started.
|
|
|
|
\section{I Have a Plan!}
|
|
|
|
In this section I'd like to set some goals regarding the future of the framework
|
|
\emph{apart} from implementing new features.
|
|
Features are important, of course, but they will always keep coming in, no
|
|
matter what we do and I have no fears: our roadmap is filled with awesome new
|
|
ideas.
|
|
Instead, what I'd like to focus on is areas that need improvement,
|
|
and some of the plans I have regarding these areas.
|
|
|
|
A very important thing that currently needs improving is language support.
|
|
While it is very easy to implement event handlers on arbitrary languages,
|
|
there are some things which are only convenient to do from Python.
|
|
The remedy here would be exposing all Python-specific functionality on TFW message APIs
|
|
as well, which should only take a few days of work for me to do.
|
|
|
|
Another issue is that some developers, who might have no experience in dealing
|
|
with low-level socket logic could find working with ZeroMQ somewhat frightening%
|
|
\footnote{Despite ZMQ is actually a lot easier to work with than raw TCP sockets}.
|
|
This is only problematic if there is no event handler library code for
|
|
their chosen languages of course.
|
|
A new idea I have been playing around with is somehow allowing developers to use
|
|
named pipes\footnote{\href{http://man7.org/linux/man-pages/man7/pipe.7.html}
|
|
{http://man7.org/linux/man-pages/man7/pipe.7.html}}
|
|
to implement event handlers, as working with these is similar to reading and writing
|
|
to simple files, a concept every developer is familiar with.
|
|
A similar idea is to allow registering simple shell commands as event handlers, with
|
|
the received message as a command line argument:
|
|
there are lot's of cases when developers don't want to keep listening for more
|
|
messages to handle, they just want a ``fire and forget'' type of approach.
|
|
|
|
Built-in event handlers could also have a config file like frontend components have
|
|
with \code{config.ts}.
|
|
This would allow developers to set them up without having to deal with additional
|
|
Python code, and would allow me greater freedom in implementing them, as I
|
|
wouldn't have to keep developers without Python knowledge in mind when working on these.
|
|
|
|
I'd also like to concentrate on stabilizing the API of the framework.
|
|
Currently each major release lasts for a few months before I am forced to break something
|
|
to accommodate new features.
|
|
While the communication of these breakages is fine --- we use mailing lists for this purpose
|
|
and our versioning scheme seems solid so far, this forces developers
|
|
to constantly update older tutorials to comply new API\@.
|
|
To make this better I'd need to consider planning ahead more, so that the newest API is flexible
|
|
enough to support new features on the roadmap and not get distracted as much by
|
|
other features emerging on the horizon.
|
|
|
|
Another thing is that I often feel like that there are some things in using TFW
|
|
that could be made a lot easier. As a maintainer sometimes I find it hard to
|
|
tell what these things exactly are, as I know the framework inside out, having written most
|
|
of the codebase myself.
|
|
I'd like to set some time aside to create tutorials using the framework myself,
|
|
so I can better narrow these potential difficulties down.
|
|
This would require me to be able to take things slow for a few weeks, as this is not
|
|
something that is possible to do effectively in a rush. In the summer months, maybe?
|
|
|
|
Currently the framework is proprietary software.
|
|
While it is not feasible to go open source today or tomorrow for various reasons,
|
|
we all believe that software which is free as in freedom \emph{is} the future.
|
|
As such, at some point I'd like to open source the whole thing if the circumstances will allow
|
|
the company to do so.
|
|
|
|
\section{Things That I Have Learned}
|
|
|
|
Despite being an enthusiast of \LaTeX{} for a few years now, I still managed to learn a great
|
|
deal about it while working on this text.
|
|
This might seem like something unrelated, but most documentation issues with software often
|
|
come from the fact that developers usually dislike writing documentation.
|
|
Since working with \LaTeX{} I \emph{love} writing larger bodies of text such as this,
|
|
as I just simply enjoy admiring quality typography which WYSIWYG%
|
|
\footnote{What You See Is What You Get} editors just seem unable to produce.
|
|
|
|
I've spent a long time working on and maintaining the Tutorial Framework.
|
|
While the list of technical things I've learned is long and exciting, I also feel like
|
|
I've learned a lot about supporting other developers, project management and communication.
|
|
Another thing that I've been able to learn is to adopt a more patient mindset while
|
|
working. Back in the day I used to be nervous because of deadlines and things not
|
|
working how they were supposed to, but now I know that these things are a part
|
|
of the job and one must be able to deal with them without getting agitated.
|
|
Any time I feel like something is not OK, I just try take a step back, relax a bit to
|
|
blow off steam and approach the issue without acting in haste.
|
|
I think this is not too related to working as a software engineer, but something
|
|
that can be applied to anything we do.
|
|
|
|
The most important thing, that I will always remember as a software engineer
|
|
and is something that I've learned during this period
|
|
is to never, ever lower my expectations regarding code quality.
|
|
No matter what anybody tells you about things like ``but we have to make haste and finish in time'',
|
|
in the long run, making compromises in code quality is always like shooting yourself in the leg.
|
|
We as professionals must always \emph{thrive} for excellence, and must always express our
|
|
deepest respect towards our craft.
|
|
The only way we can do this is by creating quality software while being a responsible
|
|
\emph{craftsman}.
|
|
It is a thing of great importance, which cannot be stressed enough, that in the software
|
|
field \emph{craftsmanship}%
|
|
\footnote{\href{http://manifesto.softwarecraftsmanship.org}
|
|
{http://manifesto.softwarecraftsmanship.org}} is what matters most.
|
|
Many developers fail to understand that no matter how insignificant the code you write
|
|
today may seem, software is art, and art is something worth pursuing just for the sake
|
|
of doing art itself.
|
|
\emph{If} that art has some purpose --- and usually the code we write has ---
|
|
that is a good thing, but not something that we always have to keep in mind.
|
|
More often than not will you find, that while creating that funky little piece of
|
|
code with no purpose back in the day, it is you who have learned something new and
|
|
valuable.
|