What is your current stack? I am looking for what to pick up next, and would like to see what you are currently using for your web framework/language. |
What is your current stack? I am looking for what to pick up next, and would like to see what you are currently using for your web framework/language. |
The first company was started 3 years ago and our technology included: (1) Python-Flask (2) Postgresql (3) SQL Alchemy (4) JQuery for web (5) Objective C for IOS (6) Bootstrap
In my second company we wanted to take advantage of the growing ecosystem around Node. We also did not want to have to manage a DB, migrations, and server scripts. Our rationale is that we should focus more on the customer and turning the customer requirements into the product than on the technology working. We are an enterprise software company and so the less complicated the technology the better since we are not doing anything ground breaking from a technology standpoint. Our stack includes: (1) NodeJS/Express (2) Heroku (3) Angular JS (I don't get all the negative comments about Angular lately because it works fine for us) (4) Lodash (Javascript utilities) (5) S3 - static file storage (images and files) (6) Jquery (7) Bootstrap (8) Firebase (9) Angular Fire (to connect firebase with angular)
Using our current backend, we were able to build the SAAS product in about 1 month with only myself as a developer instead of 2-4 months that might be required if we had used the previous technology stack. Firebase, Angular, and the Node ecosystem really helped make the coding much faster than before.
When choosing a technology stack I look to Southwest Airlines for inspiration. I might sound strange but more people should embrace the Southwest model. As an airline, they only have 1 type of plane and tries to keep things as simple as possible. So instead of building some of your products in Ruby, other parts in Python, and another part in Erlang; it is better to just stick with one or two core technology. The rationale behind this is to reduce context switching, reduce errors and bugs that occurs at the crack of technology systems, make it easy to train and onboard other people to your project, and make it easier for yourself to maintain it over the long run. My rule of thumb is that software is maintained and read more often than it is written so now I tend to take much longer to write software because I have to think about how people would read it. For every 2 days of coding, I spend about 1 day of refractoring and I do this religiously to keep the technical debt low.
It's on a case by case basis, but if it takes less time to learn and use a technology that is purpose built then I'll invest the time to learn / use something new. I find for some situations it's less time and effort to use the right tool for the job vs. trying to make one tool do everything.
I have tried both Backbone JS and Angular JS and in my opinion, I like Angular's separation between the front-end html and the model. Reading through Angular is much faster than reading through Backbone code because Angular is very opinionated. I like opinionated frameworks and languages (e.g., Python) because if there is only one right way to do something, it simplifies the code greatly. Some people don't like Angular due this structured approach and opt for Backbone. As for performance, there really hasn't been any problems with Angular and Firebase. I am not sure where the complaints about performance comes from.
And just one last comment. I augment AngularJS with Jquery and Lodash. For some functionalities, I like to work directly in Jquery or Javascript rather than use the Angular method. I find this much simpler than stick 100% with Angular and in order to keep this logic clean, I keep the Angular and Jquery code separate.
Openresty because it so much fun :) It uses lua which is a very pleasant language to work with (I love the idea of multiple return values from functions) and it built on top of nginx which is a big win for me since I always use nginx in front of my app server.
With openresty I can use nginx both as an app server and as a proxy. I think that if anyone is already using nginx they should look into openresty because it opens up so many possibilities.
couchdb because of it's ease of use. It has a simple http api that works well with openresty's `location.capture/capture_multi` capabilities. It has a server side javascript environment which can be used to validate data/render templates etc,the common js module system is very capable. It also gives me an excuse to have erlang in my stack, ready just in case.
jquery because it is reliable. The other javascript framework that I like is knockout js but I use it only when I need to have a complex client side logic and knockout js works well with jquery.
Increasingly I am using more free/paid SAAS for services like file uploads, emails, storage, monitoring, etc. Not sure if we can call this approach a "stack" but surely it is becoming very relevant and it solves most requests I get. I guess it is also interesting to rapidly hack an MVP with such tools and if the thing picks up (traffic/user base) you can scale the services (pay more) or start programming them yourself, if the think flunks time/money was not wasted. It is also a big plus that these services play super nice with mobile native and mobile web, SDKs are always available. Maybe I am a wishful thinking hipster but somehow I feel this is the trend to follow.
Yes! I forgot to mention this in my answer.
For prototyping, Parse is great. I recently built something in an hour that would've taken me a day in the past.
When I get past the prototype, RDS, S3, and Dploy.io are also huge time-savers.
I'd consider this part of the stack -- it's just not done in-house.
Can you list the services that you'd reccomend for those tasks?
Frameworks: Rails / AngularJS / Cordova
DB: Postgres / Redis / Elasticsearch / Memcached / DynamoDB
Messaging: SQS
Plan on learning in the next few months:
More Clojure
Machine Learning
ReactJS (Hopefully a replacement for AngularJS / Cordova from above)
I've been picking things to learn based on reading programming books and observing trends. 7 concurrency models in 7 weeks, 7 languages in 7 weeks, and 7 databases in 7 weeks are all good places to start for finding something new to learn. As you can tell, I'm a big fan of the series as an introduction to a topic that can then be explored in more depth after reading.
I'm getting into Go now, but I'm hopeful Rust will become the language of the future. I'm desperate for a great type system in a web framework. Elixir is cool, but I don't think I could find anyone to work on it for me.
You would be surprised! The Elixir community is growing quite fast. Come hang out on IRC in #elixir-lang on freenode sometime. Elixir also has the added bonus of the entire community more or less accepting Phoenix as the "go to" Web framework so Elixir doesn't have nearly the amount of web framework fragmentation of Go or Node.
Nothing too fancy on my end. I build standard CMS based websites at my day job using ASP.NET MVC. At home, I occasionally work with Django, but with all the news about .NET support across Linux I've put Python down and have been toying with writing C# on my Ubuntu box.
- Server: Node & express
- DB: Mongo (using mongoose)
- Frontend: Knockout.js using components (introduced in 3.2), Cordova when developing mobile.
- Hosting (db, services): Azure
Pretty standard with the exception of Knockout.js, which I think is criminally underrated following the introduction of components in 3.2, especially given all the recent hype around component/module based separation of concerns. Also Azure, mostly because I get $150 free monthly from MSDN.
All bindings are still fired upon applyBindings, but I haven't encountered issues here - it's still once on page load, and I can't imagine that it's much different than building the DOM initially using handlebars or react.
GoLang -> Postgres -> React Meteor -> MongoDB -> Blaze
Of course, most of those are interchangeable. We use Redis for caching, Docker/Ansible for deploy, etc.
( During my day job ) Front-End: AngularJS BackEnd: ROR Database: Postgress
( For my side projects ) Android Development ROR Redis/Postgress/freebase and lots of reading about Material Design
Do you use modern super dev mode and latest GWT version? How this turned out? Are there 3th party plugins repository?
We would love to use lighter-weight technology but project currently is about 300kloc and we share code on the client and the server. It's just not the size of application which JS is good for.
> Do you use modern super dev mode and latest GWT version? How this turned out? Are there 3th party plugins repository?
These are great. In 2.7 you can just refresh page and incremental compilation will do the job. It's almost like writing code in JS.
Currently trying to learn iOS development with Swift.
My general philosophy about software development is to keep things as clean and simple as possible -- and no simpler because then you wouldn't be solving the problem in the first place. So I am not suggestion that you over use (for example Jquery) to do everything in the web. What I am suggesting is to think about building software the same way that we build houses. You want to choose carefully the tools that will stand the test of time and not just the fad language or tools. For this I usually check out the community behind the software.
When I architect a software solution one of the parameters that I think about is how long will it take to get someone totally new to my technology stack up and running (and hopefully productive). Most people don't think about this deliberately and so a project might have legacy code that takes months for a new person to come to grip with. Imagine trying to recruit for this type of role. My general rule of thumb is to have the choice of tools/modules as standard as possible and aim for a 2 week preparation period for anyone to get acquainted with the code. For this reason when I use ExpressJS I stick with EJS rather than Jade. I still use CSS rather than Less or Sass (these are my personal opinion).
I also take this philosophy a step further by creating certain software patterns and try as many of the well tested patterns as possible. Thing brings consistency to the codebase.