The tools and languages you use do not matter as much as your understanding of sound programming principles. I've programmed in a variety of languages and frameworks, and I could tell you that they're just tools that will help you get the job done, IF you use them properly.
If I was just starting out, here is what I would do:
1. Read and learn about Object-Oriented Programming (OOP). If you're going to build anything more than a few web pages, you'll need to know OOP. Checkout Deitel & Deitel books for a relevant title. These textbooks are just excellent.
2. Once you have mastered the above, research, choose a stack and stick to it. Unless you have very specific needs, all of them should get the job done. Learn that framework, and get really good at it.
3. Once you feel you have mastered your current skills, challenge yourself by trying to improve things even more. (e.g. better code commenting, version control...) If you want to succeed as a full stack web developer, you'll have to keep learning and pushing your boundaries. (Hint: You should also enjoy it)
I hope this helps.
"Full-stack" web developer does get thrown around. However I believe that is still has a pretty static definition.
My understanding is it is a "jack of all trades" scenario. Except by "jack" I mean ver knowledgable just not a master, and by "all trades" I mean the layers of of a full stack developer mentioned here:
I would like to think that I am on my path to becoming a full stack developer. I believe this takes a long time. So I started by taking freelance work that enabled me to get my hands dirty. The more client need I answer the more I become familiar with all of these layers.
The only path I know to becoming a full stack developer is just start building things.
Want a starting point? Build an SPA that communicates with Wordpress for managing the state over the new WP JSON REST API, using Backbone.,js.
It's not something you want to achieve unless your goal is to be the technical cofounder of a startup. If you're the technical cofounder, *you* get to make whatever stack you want! You're the CTO. It's entirely up to you. Woohoo! Now you're the king of the mountain, but how are you going to make money? Technology is a means to an end. Nobody cares how the widget works. We only care about results. If you're caught up in the "programming for the sake of programming" mindset, get a PhD in Computer Science.
If you don't have a strong opinion about what stack to use, I think you're getting ahead of yourself. Maybe talk to your future cofounder about the market adoption of various technology. If you don't have a cofounder yet, maybe poke around Angel List and LinkedIn.
How hard will it be to hire people that know XYZ stack? Choosing unpopular technology will make it harder to scale the business. Assuming you're actually able to create something from scratch that works at all. I hear most computer science graduates can't create anything from scratch. Computer science programs crank out the employees that will work at your startup--after you cash out.
Ultimately, you need to be able to create something from nothing with your chosen language and do everything yourself--and have it all work flawlessly without weird bugs in the code causing intermittent problems. If you can't do that, you're probably barking up the wrong tree. You're only a full-stack developer out of necessity, because you can't afford to hire yet and you don't want to split more equity with a third person.
(As long as we're on the subject, I think an ideal cofounder for a full-stack dev would be someone that knows business law and marketing.)
After your imaginary startup starts growing, you'll want to hand the software over to a software architect, a dev-ops genius, a project manager, people to take it to the next level. Once it's time to hire, the business needs a completely different skillset that the full-stack technical cofounder doesn't have.
Working for any large company, they should have you doing specialized work. There can be only one CTO and it's probably not you. If it's a small company that can't afford to hire a sysadmin and a designer and a developer and a DBA, do you *really* want to do the job of four people?
"Full-stack" is more like a battle scar you get to talk about. Maybe it looks cool, but in retrospect it wasn't something you wanted.
The "full-stack" is a vague term, but in the context of web development I would define the following group of skills:
* HTML/CSS (the basics)
* A script-based programming language (one that allows you to think in procedures as well)
* An OOP language (or the flavor of the first language with all of the OOP paradigms in it)
* Database programming
* Design patterns
* MVC in particular - most frameworks out there are MVC-based
* Computer architectures - I don't believe you can be a senior backend engineer without understanding the actual hardware components responsible for everything
* Networks and server management - some good basics of hosting management skills
* Security - related to everything before, but it's another important topic for full-stack developers to always take into account
* Performance and scalability - writing a high-performance code is a skill that depends on your understanding of the server stack, the memory layer, CPU executions etc.
* DevOps paradigms - testing (all sorts of), continuous integration, tooling (version control, automated deployment, staging setup)
UI/UX/etc don't click with me when I hear "full-stack web developer" - that is more of a frontend developer/designer aspect, and is definitely not a requirement for full-stackers. It's always helpful to be able to wear more hats - design, UI/UX, marketing, soft skills could help you build a better product, lead your team or be a mediator between the team and the client, but it's hard to juggle with everything and the first group is easier to keep together in the same basket while improving your skills.
I have worked with many Indian companies as an HR and few of them used to be IT companies. I have hired many full stack developers, and what I have learned during this period of time is that full stack developer is a guy who knows everything. We hired full stack developers mainly because:
1. Full stack developer helps you to keep every part of the system running smoothly
2. Full stack developer can provide help to everyone in the team and greatly reduce the time and technical costs of team communication
3. If one person plays different roles, it saves your company's personnel, infrastructure, and operational cost
When I investigated their CVs, I found the following skill sets:
2. Development Languages: Full stack engineer should know at least one server-side programming languages like Java, Python, Ruby, .Net etc.
3. Database and cache: Knowledge of various DBMS technology is another important need of full stack developer. MySQL, MongoDB, Oracle, SQLServer are widely used for this purpose. Knowledge of caching mechanisms like varnish, Memcached, Redis is a plus.
4. Basic design ability: To become a successful full stack developer, the knowledge of designing is also recommended. Moreover, the person should know the principle of basic prototype design and UI /UX design.
5. Server: Exposure to handling Apache or nginx servers is desirable. A good background in Linux helps tremendously in administering servers.
6. Version control system (VCS): A version control system allows full stack developers to keep track of all the changes made in the codebase. The knowledge of Git helps full stack developers to understand how to get the latest code, update parts of the code, make changes in other developer's code without breaking things.
7. Working with API (REST & SOAP): Knowledge of web services or API is also important for full stack developers. Knowledge of creations and consumption of REST and SOAP services is desirable.
Many of the full-stack developers that I hired in my company as an HR also were proficient in software stack. Software stack is a collection of the programs which are used together to produce a specific result. It includes an operating system and its application. For example, a smartphone software stack includes OS along with the phone app, web browsers, and default applications. Notable among them are as follows:
1. LAMP stack: LAMP is a widely used model for web service stacks. Its name "LAMP" is an acronym of four open-source components.
1. L= Linux: An open source operating system
2. A= Apache: Widely used web server software
3. M= MySQL: Popular open source database
4. P=PHP: Server-side open source scripting language
These above-discussed components, supporting one another. Many popular websites and web applications run on LAMP stack, Example: Facebook.
1. M=MongoDB: Popular NoSQL database
2. E=Express: Light and portable web program framework
This stack currently in the huge demand as it is widely used to develop web applications.
3. MEAN stack: MEAN Stack Application Development is witnessing a growing trend in usage. MEAN is an abbreviation of:
1. M = MongoDB: nosql Database
2. E = Express: Easy to use light and portable web program framework
These were all or some of the jobs that a full-stack developer did in Indian IT companies:
1. Translate user requirements into the overall architecture and implementation of new systems
2. Manage Project and coordinate with the Client
3. Write backend code in Ruby, Python, Java, PHP languages
5. Understand, create, and debug database related queries
6. Create test code to validate the application against client requirement.
7. Monitor the performance of web applications & infrastructure
8. Troubleshooting web application with a fast and accurate a resolution
Besides if you do have any questions give me a call: https://clarity.fm/joy-brotonath