Over the years I have been asked on how I became good in what I do and what one must do to be a better developer.
I've had a privilege, over the past few years, to interview potential Java developers, both in the Java EE and Java SE sphere. There is one particular question that I ask each candidates, but that is for later.
Over the past few years, since 2005, I invested most of my time doing one thing to build myself to be a better developer:
Writing side projects.
After finishing my graduate programme, at a reputable Fortune 500 IT company, I decided that the only better way to be a developer is to apply what I have learned from University and work by doing what I do best: write side projects.
I researched what was relevant at the time in the Java industry, particularly in the Java EE market (back then it was J2EE) and create a project that will formulate on the technology that was best used at the time. Over the years, I created various projects, some for learning purposes but most to use later in life and for production use.
Typical projects helped me understand various Java features and Java/Java EE technologies, such as:
- Generics, introduced in J2SE 5 and higher (sindi-id3, the MP3 ID3 tag reader)
- Servlets, including Servlet 3 (servletutils, sindi-commons-javaee, oauthsecure, JOAuth)
- JSF 2 (facesutils, jsf2-html5, an HTML5 tags implemented in JSF2 components, jsf2-bootstrap3, JSF UI components with Bootstrap 3.x styling)
- JMS (JMSManager)
- JPA (sindi-persistence)
- Hibernate (sindi-persistence-hibernate-core, a subset of sindi-persistence)
- JavaMail (sindi-email)
- JAXB (sindi-paygate)
- JDBC (SQLExecutor)
- Beans Validations (sindi-validations, sindi-validations-ee)
- JAX-RS (a private project that I haven't committed on GitHub but sindi-commons-javaee might contains useful utility classes).
- Json (sindi-jsonweb, sindi-commons-javaee and various projects).
- CDI, CDI extensions and the BeanManager (sindi-commons-javaee, oauthsecure)
Some projects were influenced by simply implementing RFC or similar Specifications, such as:
- ID3 (from id3.org): sindi-id3.
- OAuth (RFC 5849, RFC 6749): JOAuth and oauthsecure.
- JSON Web Token (RFC 7515, RFC 7516, RFC 7519): sindi-jsonweb.
- CSV (RFC 4180): sindi-csv.
- Percent Encoding (RFC 3986): sindi-codec.
- Ascii85 codec: sindi-codec.
All of these projects are available on my GitHub page. Some are still in development, and incomplete (sindi-jsonweb) but you are free to read the source code.
Why side projects?
An athlete doesn't become professional by simply doing training only on training hours/days. He/she invests his "spare" time (by creating a spare time when required) and works on his/her form until he/she perfects his craft. That is the same attitude a developer has when he/she invests his/her time doing side project(s).For some, starting a side project is hard, partly because it's usually difficult to find something of interest to build a project from, but for one who has passion for development, he/she will find something to fill their drive to code.
Developing side projects has its advantages:
- It builds discipline: Most developers work long (and strenuous) hours and to find time to code on the side after hours requires disciplines. Also, how many times have developers started a project and actually finished it? Disciplines builds character.
- Creativity: Developers are all about solving problems through code and what better way to be creative but through side projects? Just look at the the amount of repositories being created on GitHub alone.
- Patience: "I have patience, and experience. A man can do anything if he has those." - Helmut Zemo in Captain America: Civil War. Even Romans 5:4 states that patience work(eth) experience. That's self explanatory.
- Sense of Accomplishment: It feels good to finish your project and to present it to the world.
- Relevance: In the world of growing technologies, staying in your comfort zone of "this is what I know and do best" can get you far to a certain extent. If you cannot keep up with what the world demands and do not contribute to it, you will miss the "groovy" train (pun unintentionally intended). When I started learning RESTful Web Services, I started with understanding RESTful Web Services, coding applications using JAX-RS and Angular 1.x. I went even further to add security to the application, thus extending my research to OAuth, JSON Web Token (JWT) and further into Cross-origin resource sharing (CORS). This is how JOAuth and OAuthSecure was born.
While there are occasional knocks such as "sacrificing" your work-life balance, the reward(s) is(are) well worth it. A sport commentator once said a wise statement, when speak about Frank Lampard: "The work that one puts in that the world don't see, that brings the reward."
I always ask every candidates that comes for an interview if they have side projects/code after hours, just as a hobby or for a private project, or whatever reason they wish. From the candidates I have the pleasure of interviewing, very few actually do. I believe that those who take time harnessing their craft after hours are better developers than those that simply code to put food on the table (note, that is my humble opinion).Why must organisations not overlook developers who have side projects?
In that question alone, I look for the following:
- Passion: A person who has passion about something is willing to put anything on the table to learn about his craft. He/she has a never-say-die attitude and is willing to better himself every single day.
- Knowledge sharing: It might sound strange but from the few passionate developers that I have interviewed, most of their lessons learnt came from side projects.
- Vision: Coupled with creativity, I like to see what are the developers' vision when they worked on the project, both long term and short term. Innovations stems from a creative vision (IMHO).
- Autodidaticism (self-learning): There are differences between learning new skill-sets on the job versus learning new skill-set on your spare time. Those that learn on the job learn only the skill needed by the job while those that do on their spare time take time to understand the work, technology and best practices to use those skill-set very effectively. Again, that ties in with passion.
Organisations who seeks solely for developers based on their work experience will only get developers who are "code soldiers": they code solely because they are contracted to code and get paid for it. Though it is not a bad thing, the difference lies in the quality of work produced. Seeing I'm a perfectionist, quality (and perfection) counts for something.
Final thought(s)...
Doing side projects has its reward, both personal and professional. Think of it as your career portfolio (if you want to build your experience outside of your CV). My team calls me a Java EE guru, though I believe I have lots to learn. I am more than capable to engage in complex and large projects quite effectively due to the fact that I have built wealth of experience and lessons learnt that I can refer to (GitHub, StackOverflow, Blog, etc.). I took a recently old project (built with Ant), Mavenized it, removed outdated technology and made it Java EE compliant and deployed it in the new Payara Production Environment (which I built) in a matter of hours (it was an emergency). All of the knowledge I used to make this happen was from years of building side projects.
The work that most people don't see yearns great reward. If you're passionate about what you do as a developer, side projects is the way to go.
Oh! One final thing.
I see organisations creating Hackathons, to see what innovative products can come out of coding for X amount of hours that will benefit them. While this is all good and dandy, I would prefer the Google 20% time policy or better yet, dedicate a/some day(s) to side projects and measure the Return on Investment they apt to gain from their developers and new innovations that will come out of it (which is critical seeing that we're living in the innovation age and organisations have to be innovative to survive).
If you have other thoughts to share on anything I have just said, let me know in the comments below.
Comments
Post a Comment