Relaxing is a luxury in any industry, more so in the rapidly changing technology. The first duty of a software developer is to learn how best to learn because knowing how to code is a lifelong commitment learning something new. Moore’s Law means the rate at which technologies are progressing can leave people far out in the cold since trends and technologies often expire rather quickly. The unusual paradox is just how flooded the job market is with software development and engineering jobs, with posts in Data Science and Analytics, Big Data, and AI trailing far behind in demand but at increasing speeds. The explosion of startups and micro-businesses caused a wide set of skills to be needed as a benchmark, most of all, full-stack engineering.
The term full-stack means developers who are comfortable working with both back and front-end technologies
So, a unicorn... basically. While this is not a standard set by industry, it is an evolutionary facet of skills. Full-stack developers always try to learn open source technologies for immediate job application. You could saturate it into a combination of prowess in:
Front-end Development + Backend Development + DevOps + Design.
Added to this, a full stack developer should be comfortable in deploying, optimisation and application automation.
How Do You Learn?
Every CS student knows graph traversal algorithms:
- Breadth First Search (BFS)
A traversal algorithm which in the first turn visits all adjacent nodes to a root node and then starts digging deeper.
- Depth First Search (DFS)
A traversal algorithm which first touches the bottom of the maximum depth of the first child node and then returns and starts the process from a second child.
But how should you learn? And how does this apply to that question? It seems mostly about personal circumstances and application to me. Research students, for example, might prefer a depth first learning approach because they have to condense their work to a single unit at any given time.
Software, on the other hand, doesn't award you the opportunity to have a top down approach to solving problems where you might not have the time to build, test, and fix things. Suffice it to say, a software developer is then a breadth first learner, trying to learn how to operate in a number of fields all while trying to increase proficiency in those fields. This involves continuous practice and work.
This also means that for a full-software developer, there is a diversity of areas to gain experience in. Needing to take care of everything means full stack developers always have their hands dirty, beginning with top level nodes and digging ever deeper. A wise man has always told me, “...you struggle, you learn.” and the more you learn, the stronger and more useful you become. The fast pace of technological advancement and the race for their adoption has left many organisations needing their in-house tech specialists to be proficient in a wide range of skills. It would seem then that embracing the open source culture of knowledge sharing would work for the benefit of people who are willing to expose themselves to it.
A Passion For Learning
As a developer, if you commit to learning new things regularly and quickly and always ardent to try new approaches to old problems, you definitely should consider expanding your field of expertise to other technologies and full-stack development will only serve you well. Ultimately, it’s about learning, implementing and improving, read improvising, upon your code. The continual nature of the work forces a variety of insights that are a key element in great development. You’ll need to know where to begin, that involves asking the correct questions so you can pick the best methods, and always being prepared for the dynamic nature of development requirements.
Technological advancements have ensured that each profession involves the adoption of computers at any stage of the industrial process. It’s rather poetic that the same field that disrupts other industries s a victim of its own innovations. Web developers are entering an age where it will be required to integrate different technologies in a seamless convergence. I shy away from using the term full-stack developer with regards to web development primarily because there is a lot of politics regarding acquired skills to call oneself a full-stack developer in any respect. The way I see it, any developer shouldn’t fall short of any of these:
Very good knowledge of at least one web framework
A great understanding of front-end tools, particularly CSS and JS (@media, HelloWorld, DOM, and ES6).
Know streamlining tools like Grunt, Gulp, and Browsefly
Deployment techniques like AWS EC@ with Apache2 or Nginx as a web server. Should have some experience with Docker and Virtualization
Spent time working with SQL and NoSQL (MySQL, MongoDB), is able to model relations, and can implement advanced queries and SQL Joins.
Isn’t shy to Google problems and share solutions on StackOverflow for example
Design a simple web application end-to-end many loosely coupled components, suggesting reasonable architectural changes
Automates release cycles with Chef or Ansible. Automate logging and failure retrieval.
Basic knowledge of hybrid mobile app development with JS, Chrome extensions and progressive web applications.
Enjoys to context switch between domains, competing technologies in a timely and empirical fashion.
I believe this will force you to learn the technologies at the pace with which they are changing to appreciate your career options and improve the value of your involvement in any project at any stage of development. And, it pays better... a lot better.
Master Of None?
However, committing to full-stack development has a share of drawbacks and it just may not be the right choice for every developer out there.
You have a responsibility to keep up with the knowledge you have gained. Blogging, jotting notes, or journaling may be able to help you remember tricks from other projects and keep track of the technologies you’re learning.
A few developers are ever given significant autonomy in the beginning stages, but, diving into the deep end is the only way to test your tolerance levels and know when and how to chastise yourself in an effective manner. You have to plot a clear plan for your career and stick to it. This may involve the infamous 100 hour weeks synonymous with startups the world over.
Maintain the enthusiasm that comes with learning and never be content with what knowledge you've accomplished, but remember that nothing learned is wasted. Expose yourself to other programmers, attend meetups, DevOps, UI/UX or Backend, it all adds a point to the course you’re charting. Read well. Experiment well (especially with load balancing). Document well. Play a lot with CSS. Invest in a t2 micro instance of AWS. Separate your work environment with a Docker. I’m on a similar journey, and while no one is perfect, I prefer playing the long game so I can actually master the art. Please prepare for an unusual share of ups and downs (and self-loathing) but rest easy in the knowledge that full stack development is not fully defined, you write that book every day. Make it a good read!