Free resources for learning full-stack web development
github.com
github.com
To say you can do backend code because you can write in JavaScript is like saying you can write a paper on cardiology because you know English. Knowing the language is a small part of the job. There is a lot of domain knowledge that is required in addition to the language.
Learn networking, learn operating systems, learn distributed systems, learn performance and scalability, learn about databases. Then learn node.
Do that right and you'll have a much directed path towards what to learn next.
Monitoring is mostly reactive, to stay afloat you should focus on prevention: know your code, keep it clean, test it, do load testing... and monitor it.
Personally, I recommend learning domain modeling and understanding entity relationships, primary and foreign keys then SQL. Great foundation for engineers at most companies.
Let's take a look at the "best practices" tutorial from nodeschool.io, one of the recommended tutorials.
https://github.com/excellalabs/js-best-practices-workshopper...
Can you list all the mistakes in this code?
- Using IEEE 754 floating point numbers (built-in Number type in JavaScript) for storing a balance is unsafe. Read more here: http://stackoverflow.com/questions/3730019/why-not-use-doubl...
- Your bank would never represent a balance in that way. They store transactions individually and they fold them to compute your balance.
- The input validation is extremely weak. Pass in: undefined, NaN, Infinity or some funny value and you will end up with a corrupted balance, or force "decreaseBalance" to increase, and "increaseBalance" to decrease.. The isValidAmount method should use "isFinite" rather than strong comparison with null.
And let's better stop here...
I agree, though, that those learning services give the impression that it's just about learning how to code and maybe use some design patterns. You won't find a security/authentication course on FreeCodeCamp or one about codebase maintainability, which is a shame.
Many people underestimate backend programming, and underestimate technologies only because they make use of a some scripting language like JavaScript, Ruby or Python.
I have seen millions of dollars wasted and jobs lost because of the harmful idea that backend development is for everyone and that anyone can do it after some simple training.
Production-strength backend development has become more productive because of better tooling, but not any easier. It still requires plenty of domain knowledge, discipline, rigor and attention to detail.
A functional prototype for a small startup might not strictly require a lot of rigor, but load test it or throw some millions of daily active users at it, or get a pen tester to see if it's secure enough or just advertise it and start receiving malicious users to see if holds up.
What do you think is the best way to learn production best practices for back-end?
Each one of those requirements comes with their own set of good practices. e.g: security good practices, maintainability good practices, configuration good practices, documentation good practices, etc...
Then, you don't protect a $10 bike with a $100 lock. There are tradeoffs that need to be taken into account.
or don't bother, because its javascript.
If your project is big enough to require the skills of an experienced back-end guy, then you're so far past the learning stage that you might as well be in your rocking chair screaming at the neighbor kids.
Rails works great for every web task except the very big and the very small. Very small being anything you'd want to put on a Raspberry Pi.
The learning curve is reasonable, and can be made easier if you get the basics of both Ruby and MVC down by using a simpler Ruby framework like Sinatra to build out a few toy apps before jumping into Rails. Once you feel like you need more out of a framework than Sinatra can give, it's time to switch to Rails.
Ruby and the web go together like Captain and Coke.
But it will be a cold day in hell when I suggest using node for the backend.
You don't have to use babel, webpack, and co.; there are (and always have been) simple make-based workflows eg. https://github.com/tj/mmake for asset management.
Full stack != learning react.
It is possible to have a successful website without having good front development.
It's possible to create a lot of useful things that don't have good design.
Usefulness is good design.
Craigslist has a great minimalist interface. There's a lot of ways it could go wrong, and it avoids a great majority of them. That said, I don't think a lot of development has gone into actually considering their use cases and developing workflows that prefer them.
Obviously, it's still a very useful site regardless, but I would not call it a well designed site.
If a "proper designer" got hold of it, they'd ruin it.
Good aesthetics are nice when you have them, but are absolutely not a requirement for a good piece software so long that it does it's job and the UX doesn't suck. Most real world people don't care how it looks as much as a lot of designers think they do.
Not too imply design isn't important for a real product. But if you're hiring full stack developers, then you're probably not making a ton of comps.
And on the other side, an app can be aesthetically beautiful and total have crap UX, which is too common with a lot of startuppy products.
Although they have better UI/aesthetics, from a UX perspective, Google and Amazon famously hew pretty closely to their original product design.
What matters to these companies - and, more importantly, their customers - is delivering the content that the customer wants, at the fastest possible speed.
CS 20SI: Tensorflow for Deep Learning Research http://web.stanford.edu/class/cs20si/syllabus.html https://news.ycombinator.com/item?id=13781067
A visual introduction to probability and statistics http://students.brown.edu/seeing-theory/ https://news.ycombinator.com/item?id=13735714
Mathematicians becoming data scientists: Should you? How to? https://quomodocumque.wordpress.com/2017/02/26/mathematician... https://news.ycombinator.com/item?id=13739687
good beginner tutorials for Stan or probabilistic programming in general http://camdavidsonpilon.github.io/Probabilistic-Programming-... https://news.ycombinator.com/item?id=13742102
Supporting the AI Talent Pipeline https://medium.com/@mark_riedl/supporting-the-ai-talent-pipe...
Georgia Tech Offers Online Master of Science in Analytics Degree for Under $10K https://news.ycombinator.com/item?id=13382263
Practical Deep Learning For Coders http://course.fast.ai/ https://news.ycombinator.com/item?id=13224588
https://news.ycombinator.com/item?id=13599074 (learn or be a dinosaur)
https://news.ycombinator.com/item?id=13605222 ($1k machine)
https://news.ycombinator.com/item?id=13588070 (oxford deep nlp)
Coding The Matrix: Linear Algebra Through Computer Science Applications http://codingthematrix.com/
I want to somehow set up an identical environment on my dev machine, and on a VPS in another continent (too much latency to edit files on directly). Ideally I'd then be able to deploy from a dev environment identical to my production environment. I tried docker but debugging the containers did my head in. I was thinking of trying VM images with vagrant, but I'd love to know if there is a simpler solution to this.
I'm just one person doing it in their spare time.
if you are looking for a product who's primary goal is to create identical machine images check out Packer https://www.packer.io/intro
rsync -Pa ./site/ deploy@your-domain.com:/home/deploy/web/site/
Note: The trailing slashes are important.
I use nodemon to watch /home/deploy/web/site/ for changes, which restarts the server. There are tools like nodemon for whatever stack you're using (rails, etc).
However, if you're feeling brave, you should definitely check out OpenShift (community version at http://openshift.org). OpenShift is basically Kubernetes with a bunch of cool stuff added, one especially useful feature is source-to-image.
It pulls your code from a scm repo and finds a builder image (or you can choose one) and it will build the docker image for you. You can have it pull whenever there is new code and rebuild the image and deploy if you want.
On top of that you get lots of cool docker orchestration features.