A while ago I ran a very short survey for some feedback on my Java tips.
One of the two survey questions was: “If you could have a one-on-one teaching session with me, what are the two topics or questions about Java that you would ask me?”
One of the responses we received for that question was: “Which Java topic (class) must I explore to build/enhance my cross platform development skill set?”
I assume, from the context of the question, that the word “class” here doesn’t mean a specific Java class, but rather a course or class covering some topic. That led to some interesting thoughts about cross-platform and full-stack developers.
What platforms for cross platform?
My first reaction was to think about cross-platform being a Java application running on Windows and Linux and MacOS. That isn’t very difficult, because Java has taken an inherent cross-platform approach since day one.
Then I thought about adding mobile operating systems like Android and iOS to the mix. That added a huge amount of complexity to the answer.
Then I thought about the skills that a Java programmer should probably need, and that inevitably led to thoughts about “full-stack developers”.
Note that I’ve written it in italics and double quotes. From here in, these will be my personal opinions (IMHO).
Advertised requirements for full-stack Java Developers
There appear to be lots of adverts for full-stack Java (and other) developers. What is a full-stack developer, anyway?
Full-stack development combines both front-end and back-end development skills, which can be applied in a wide variety of enterprise/corporate IT projects. Not only do you need to know a number of front-end and back-end technologies, you also need to have design, coding, testing, integration, devops, communication and thinking skills.
Let’s look at some of the skills needed.
Front-end development skills
Front-end developers are responsible for a website or application’s user-facing elements. These include the user interface (UI), visual presentation and browser compatibility issues (for websites). Front-end developers create everything a user sees and experiences when navigating a site or using an application.
Essential front-end technologies that a full-stack developer should know would include:
- HTML5 and CSS3.
- JavaScript.
- Third-party JavaScript libraries like jQuery, Angular, and ReactJS.
You may need to know other front-end technologies. These would depend on the back-end enterprise stack being used. These could include:
- JavaServer Pages (JSP) and Java/Jakarta Standard Tag Library (JSTL).
- JavaServer Faces (JSF) and a JSF library like Richfaces, IceFaces, Primefaces, MyFaces, etc.
- Spring Boot and Spring MVC together with various view technologies such as JSP/JSTL, Thymeleaf, Tiles, FreeMarker, Velocity, etc.
Back-end development skills
Back-end developers create and maintain the website or application’s business processing and database components. These components work with the front-end components to provide the application’s functionality.
Essential back-end technologies that a full-stack developer should know would include:
- At least one server-side programming language. Here we’re talking about Java, but organisations might also require knowledge of Python, Ruby, PHP or. NET.
- At least one Java enterprise framework: the Spring Framework and/or Java EE (Java Enterprise Edition/Jakarta EE).
- Knowledge of Database Management Systems (DBMS). This would include relational and non-relational databases (generally SQL vs NoSQL). PostgreSQL, MySQL, Oracle and SQL Server are widely used SQL databases. MongoDB, Couchbase, Redis, Cassandra, Haadop, and Neo4j are various forms of NoSQL databases.
- Caching technologies such as Varnish (web cacheing) and Memcached (caches back-end data).
- Microservices. The Spring framework simplifies microservice development with Spring Cloud and Spring Boot.
Other skills
Other skills that a full-stack developer needs will probably include:
- Excellent communication skills, both spoken and written.
- Time management skills, attention to detail, patience.
- Architecture design skills, including multi-tier and web architectures.
- Strong understanding of algorithms and data structures.
- Basic OO design skills and knowledge of design patterns.
- Database design skills.
- Basic prototype design including UI/UX design.
- Security risks, issues and platform vulnerabilities.
- Know how to create and consume REST and SOAP web services.
- Unit and integration testing is a must. JUnit, Mockito and Selenium jump to mind.
- Knowledge of version control systems (VCS) such as Git, GitHub, etc.
- Continuous integration and continuous deployment (CI/CD) using DevOps build tools (Maven, Gradle, Jenkins, Docker, and Kubernetes).
- Knowledge of Linux is important when managing servers.
How do you become a full-stack developer?
Work, work, and more work!!
Learning everything you need for full-stack development is very daunting! There are a variety of educational paths that advertise full-stack training. They range from boot camps that run from three to six months, to college degrees that take between three and four years.
You can also choose self-study. How long that will take can vary immensely depending on your enthusiasm, determination, amount of spare time and chosen medium (internet course, part time college or varsity, correspondence degree, etc.).
I believe these are all good options to start you off in the right direction, because there is a huge amount of technical knowledge that you have to gain. However, there’s nothing to beat experience, lots of it! Over many years…
Exploitation scam?
I personally think “full-stack developer” is somewhat of an exploitation scam started by personnel agents wanting to push their candidates ahead of others, and accepted without question by HR staff and software managers who should know better. Why employ two, three or even four new developers for the software team when we only need to employ Bob here who is a “full-stack” developer? Why even have a software team in the first place?
Has anyone ever seen adverts for “full-stack” lawyers? There are criminal lawyers, divorce lawyers, property lawyers, corporate lawyers, tax lawyers, labour lawyers, but there are no full-stack lawyers. If you search for a lawyer, you look for one who is qualified in the particular field that you need help with.
We hire a plumber when we have a problem with the plumbing. We hire an electrician when we need a new wall plug installed, or a certificate of compliance when we sell our house. We hire a tiler to tile, a painter to paint, a builder to build. Yes, a handyman is a jack-of-all-trades, but is generally not a certified electrician, plumber and builder.
Most people specialise when it comes to work. Why not programmers too?
There’s absolutely nothing wrong with being a jack-of-all-trades. The more knowledge that you have in your field and related ones, the better! But there is a danger that a full-stack developer can just scratch the surface of all these technologies, and then becomes a master of none. If you stretch your talents too thinly, you can cause more harm than good when developing an enterprise application.
Conclusion
As I said at the start of this post, these are my own opinions (IMHO). What do you think? Let me know your opinion about full-stack development by sharing your comments on this blog post.
1 thought on “Thoughts on the concept of full-stack developers”
Pingback: Cross-Platform Mobile App Development for Java Developers • 2022 • Incus Data Programming Courses