This is a discussion that's come up frequently with my peers. To HN's software engineers, I'm wondering if you consider yourselves to be:<p>-a generalist / full stack engineer, or...<p>-a specialist / domain expert.<p>What led you to this career path? And what impacts (both positive and negative) has that decision had on your career?<p>Thanks in advance!
I'd argue that before one can become a 'specialist' that you should first become a 'generalist'. I would consider myself a generalist - I'm primarily a C# - ASP.NET MVC developer.<p>But that doesn't stop me from writing WCF services, web services, using message queuing (MSMQ but I prefer RabbitMQ with MassTransit nowadays) or writing T4 templates or custom code generators. I generally do website design (I have worked for a branding/design company previously where I designed websites based on graphic designers' slicing) that includes your typical front-end stuff like JavaScript/CSS with some pre-processing (SASS, Less, CoffeeSCript), AJAX and web sockets.<p>I would consider myself a 'full-stack' engineer because I am generally responsible from writing everything from the front end to the databases and integration. I consider things like design patterns, wiring up IOC containers, applying SOLID/GRASP principles (ex. abstracting components to minimalize the need for change), managing project timelines, planning and estimates a daily ritual. All my projects use either a N-Tier or a DDD approach.<p>I have also toyed with a multitude of programming languages and frameworks outside of my scope of 'specialisation'. I'd hence argue that becoming a good programmer would requiring you to become good across the board (and at things outside the scope of the project - ex. I apply similar approaches to what I've learned from writing Scala/Python/Haskell).<p>I wouldn't consider a programming 'specialist' the same as a domain expert.<p>You definitely need to acquire domain knowledge to be efficient at what you do, but you shouldn't need to be considered an industry expert. I've only seen bad things happen when programmers are left to make decisions that require domain knowledge because there are no real domain experts around.
I'm is generalist, but might be not a 'full stack engineer' - because I person who has and use skills from two different worlds Art/Design & Software development.<p>Some time ago I realize that the generalist skill set it's give more freedom to me, because if you do only something one, you will going into a trap (you will become very dependent on your employer, tools, industry, market etc. and if something of that is going to fail you be a first who suffer from it).
As generalist you have more clear view about any problem that you working on, but you can lack in some areas (in most cases it's can be easy solved by short connections with domain experts).<p>Generalist skills is very suitable for small cool teams, specialist more in demand to big corporations.<p>My skill set Art&Developing is very helpful for projects like games, and for any projects what is have very strong connection between graphics and technical parts.<p>But generally specialist&generalist it's not strong terms because you able to be a generalist on some level but on the more hight level you still be a specialist.