Choosing what Technologies/Frameworks to use
I have seen a few of my good friends on twitter discussing what technologies/frameworks they use and why they chose them.
I have also seen people saying why they should use this technology/framework over that technology all with really good arguments, as well as people asking which technologies/frameworks/libraries they should look at.
Note:- This is from the perspective of a company and not an individual developers stand point.
It comes down to a number of things and twitter isn’t really the best place to discuss this as it’s too small to get your point across hence this blog post.
I have worked in a few different places over time and there really is no single answer, some financial place I was in you were told which technology you were going to be using and it wasnt even up for debate, software architects who you would never even see had made the decisions already whether that be a good idea or not.
I would say choose the technology/framework that fits your current criteria as well as the technology/framework that matches your teams skill sets.
There has been a few posts about MVC or Nancy, in the end who cares what you choose? – if it gets the job done right?
Perhaps if you’re in a small team then its easier to choose say Nancy over MVC perhaps? – but if you walked into a team of 50-100 developers in a company im betting more people know MVC than know Nancy, that’s not to say MVC is better than Nancy, I havent even looked at Nancy, why not? – for a couple of reasons, why do I want to look at Nancy when MVC is used through our solutions, do I want to spend time learning another tool that does the same job? – no I don’t have time, don’t get me wrong I love to look at new ways of doing things, but I want to spend time learning something else like KnockoutJS or RavenDB and expand on my skill set, id rather do that port perfectly fine code bases which use a number of tools that run on MVC to Nancy and then have to check everything still works as expected including tests, build scripts, all sorts of other tools we use like chirpy and T4MVC.
People wonder why companies choose Microsoft products over other similar products and from experience it’s usually for either the option of MSDN licence support if required, or that more developers out there know and understand the product therefore there is more chance of help/finding a solution to a nasty bug – sort of strength in numbers it’s also easier for a manager to say to their boss look we will use SQL Server instead of CouchDB because of the products past history and thy can sleep safe in the knowledge its proven – I am not saying that other products are brand new and not to be trusted far from it, but I hope you get the point.
Recently we started using CoffeeScript for our latest project and to be honest I have never liked it, it was good for organising code in a better structured manner and I will leave it at that – we are looking to move to TypeScript and this isn’t because it’s a Microsoft product, its open source and I just think it’s so much nicer due to the tooling. It’s a better too for the job in my opinion and in summary there is no magic answer to what the best technology is, decide upon the variables in play and go from there is what I would suggest.
Not everyone will agree so feel free to add a comment.
I think its fair if you’re in a team and all they know is MVC to continue using that technology however, it’s always worth looking at other things that may help achieve your final goal in a quicker and easier way.
I’m not sure what you mean by Nancy does the same as MVC, if you mean output a response then yes it does, in that sense Classic ASP is the same as Nancy and MVC however, we know that things were improved to help us reach our goal in a better manner and I believe Nancy improves upon MVC.
I agree with “choose the technology/framework that fits your current criteria”.
I am now wanting to expand my skillset as you are and looking at KnockoutJS or Backbone. From my research this has risen the possible ugliness of a MS backed project and a potentially better tool with Backbone. I haven’t looked hard enough into the differences but it highlights to me that “safety in numbers” attitude again.
You do say “decide upon the variables in play and go from there” which is a fair statement and I believe when using a potentially better OSS tool compared to MS efforts you have to make sure you have the support and the ability to gauge longevity of the project. (Nancy has that, I’m not sure on Backbone at this stage)
What frustrates me the most is the audience MS has over potentially better OSS projects. They make MVC OSS as a little indication that they are giving the community what they want but I’m not sure on the ratioof PR requests raised vs accepted, I imagine small. They promote node.js because its not a direct threat to their ecosystem but where is the .NET OSS promotion?
If you have a decent manager he/she is always reviewing technologies even if you already have X amount of projects already written in Y but from what I currently see you have to learn MS to get a job but use OSS for your own projects as you know they are better which means twice the work for you the developer.
I can’t help to think you are contradicting yourself a bit here. Why choose Nancy over MVC if team already know MVC.. fair enough.. but why choose CoffeScript when the team already knows Javascript if that is the case?..or TypeScript over Coffee/JavaScript? I am confident you have an answer here and I’m also equally confident it can be extrapolated into any “why x over y” discussion.
If you learn KnockoutJs, should not never switch to AngularJS, Backbone.js or Batman.js? If you know MSSQL, should you never look at CouchDB, MongoDB, Redis or RavenDB? Sounds like a horrible fast track to stop learning and growing as a software developer.
Just because you know something doesn’t mean you should not know about your options and apply them when best suited.
It’s good to look and play with stuff that’s not in your primary tool belt, because even if you never use them on a project, chances are they’ll given you insight on how problems can be tackled from other angels and you can use that experience to solve problem, more efficiently, using the tools you want.
The same goes for languages.. are you a c# developer? Awesome! But have a look at other languages like Ruby, Scala, Kotlin, Clojure etc because you’ll learn valuable lessons that will help you become a better C# developer
I *hate* (with passion) the idea of silver bullets. Nancy isn’t a silver bullet and never was designed to be one. When you start having to do too many trade offs in terms of design and functionality when you attempt to satisfy everyone’s needs
The reason that alternatives exists, whether it be a web or java framework is to offer different solutions to the same problems and sometimes even to offer a solution to a specific subset of problems.
I can’t help to think you are contradicting yourself a bit here. Why choose Nancy over MVC if team already know MVC.. fair enough.. but why choose CoffeScript when the team already knows Javascript if that is the case?..or TypeScript over Coffee/JavaScript? I am confident you have an answer here and I’m also equally confident it can be extrapolated into any “why x over y” discussion.
If you learn KnockoutJs, should not never switch to AngularJS, Backbone.js or Batman.js? If you know MSSQL, should you never look at CouchDB, MongoDB, Redis or RavenDB? Sounds like a horrible fast track to stop learning and growing as a software developer.
Just because you know something doesn’t mean you should not know about your options and apply them when best suited.
It’s good to look and play with stuff that’s not in your primary tool belt, because even if you never use them on a project, chances are they’ll given you insight on how problems can be tackled from other angels and you can use that experience to solve problem, more efficiently, using the tools you want.
The same goes for languages.. are you a c# developer? Awesome! But have a look at other languages like Ruby, Scala, Kotlin, Clojure etc because you’ll learn valuable lessons that will help you become a better C# developer
I *hate* (with passion) the idea of silver bullets. Nancy isn’t a silver bullet and never was designed to be one. When you start having to do too many trade offs in terms of design and functionality when you attempt to satisfy everyone’s needs
The reason that alternatives exists, whether it be a web or java framework is to offer different solutions to the same problems and sometimes even to offer a solution to a specific subset of problems.
I think you have the wrong end of the stick – I am more than open to learning different languages/frameworks/technologies that do the same job, I choose what I want to learn, it was more from a why do companies chose this technology over that technology not why as a developer I dont wan to learn x, y or z. I am on tekpub and pluralsight learning all sort of technologies every week it wasnt a post aimed at individuals.
Not for a second would I ever say if you lean KnockoutJS dont learn BackBone or anything other thats just not what I would ever tell anyone, I’m all about learning all the time as much as I can but at company level you dont have the time to learn each of the choices, pick one and go woth it and in our case we went with CoffeeScript, as a company we liked it, as a developer I hate it and think TypeScript will serve us better, I only added that in as one example.
I would never be so narrow minded to say that if you know x then dont go off and learn y – I read about x and y all the time, Im an open book on technologies.
It is good to play with other tools which I do all the time, I’m currently looking at number of tools which my work dont use.
I think you have the wrong idea from my blog post and thats fine, was more answering questions about why companies choose a technoology not what developers learn.
No one likes silver bullets, I dont they exist to be quite frank.
Sorry.. re-read it now and realized I’d skipped the two, short, paragraphs in the middle of it =/
Its cool dude, Im huge on learning stuff, was more of a reply to people always asking why do people choose x over y and my point was there are lots of reasons.
I feel you’re contradicting yourself often throughout the post.
“why do I want to look at Nancy when MVC is used through our solutions”
“but I want to spend time learning *snip* and expand on my skill set”
This could be applied to anything, you know Knockout, whats the purpose in learning Backbone?
In this case you picked Nancy. How does learning Nancy not expand your skill-set? Nancy solves a similar problem to MVC, or WebAPI, but in a different way. Learning Nancy isn’t about learning JUST a framework and then saying “i haven’t learnt anything because I already knew MVC”. You end up thinking about the problem you were solving differently.
One of the things I see with MVC is that controllers are way too bloated and do too much, using Nancy I’ve learned to make Modules more concise and straight forward. This knowledge is now easily applied to MVC.
I know MVC, and I use it in my day job. But in my personal time I work with Nancy.
—–
Now apply the same thing to Knockout. It’s another MS endorsed framework, and now what are you going to do, NOT learn any other framework that solves a similar problem? Knockout and Backbone are vastly different. But by your logic you have no reason to learn Backbone because you already know Knockout, so you’re not expanding your skill-set.
You want to learn RavenDB? But what’s the point when you know SQL Server? Relational Databases will solve most likely any project you ever work on, and scale more than well enough. So you’re not really expanding your skill-set.
—–
“but if you walked into a team of 50-100 developers in a company”
If you’re working on a team with 50-100 developers then you’re most likely going to find the majority of those developers have never heard of RavenDB, Backbone, Knockout, and probably have limited knowledge using MVC despite having years of experience using it. These guys go home and don’t learn anything new. I’m not saying this is all 50-100 developers, but a lot of them are just plebs who got into the industry and don’t have any real passion.
So why introduce anything non-Microsoft to the team at all, there’s a lot of up skilling involved in learning any new language or framework.
—–
I don’t want to sound cynical or anything, but I don’t see the point of this post.
If someone wants to go post “MVC is better because it’s got async support so I wont use Nancy” or “Here’s some reasons why you should look at Nancy” type posts. Let them. At the end of the day it’s up to the individuals choice on what he wants to work with, and it’s up to the company to device what path they want to walk down.
I entered this industry because I love programming, I love solving problems, trying new things, learning, and more recently working with the community (JabbR/Twitter)
As long as we’re all learning and having fun… what’s the problem.