Ask HN: How does a 1990s web developer get back on track?
During the late nineties I was making various interactive/dynamic websites using the then standard technologies: HTML, PHP, Perl, Mysql, and a tiny bit of CSS. This was the time when Javascript was really only used for form field validation and to spawn popups (Ajax was not yet around), when all layout was done using borderless table/tr/td HTML elements, when there were no mobile devices and all you had to care about was one or two screen resolutions and basically two browsers: Netscape and MSIE. Since then I have been pursuing my IT career in a different area. But sometimes I still find myself wanting to setup a website every now and then. But in the little free time I have available, I stumble upon all kinds of web technologies and frameworks: JQuery, Node.js, Ruby on rails, AngularJS, Backbone.JS, Django, Bootstrap, to name a few. Ofcourse all have their purpose, weaknesses and strengths. But after work and family, there isn't much time left for exploring and trying new things. Maybe other people have already made this journey and can share their experiences? What would be the best way for a nineties web developer to update his knowledge and skills?
120 comments
[ 6.8 ms ] story [ 982 ms ] threadNodeJS or Python or Ruby
These are your fairly standard backend choices. They all have minimalist and full featured frameworks for building applications including but not limited to Express, Koa, Ruby On Rails, Sinatra, Django, Flask. Go is also fairly easy to get going quickly in. There is not really a wrong choice here for a personal project.
In the case that you want a single page application that works with the backend you made with the previous choices:
Backbone or Angular or React+Redux(any flux implementation will do)
These are for consuming your backend and any of them will do. Learning Angular is its own thing despite it being javascript. React+Redux seems a little odd by embedding html in your javascript but once you get the hang of it it's pretty neat. Don't know much about Backbone but I've heard its fairly easy to use.
Bootstrap is pretty easy to learn and use to make your website responsive with minimal effort.
Heroku is by far the easiest platform for deployment and horizontal scaling however it can get pricey quickly. AWS has a similar solution with Elastic Beanstalk but I've got no experience to share with that. If you want all the control (but more work) you can go with Digital Ocean for a 5$ VPS. Unlike Heroku you will have do all admin work like installing necessary packages, databases, and configuring a web-server but you can control every little bit of your application without having to spend more than $5 a month.
Perl and MySQL are strong choices and there must be a lot of big companies out there who still use them because it works for them. Startups always want the cutting-edge technology (NoSQL), but sometimes a good old RDBMS like MySQL is the way to go.
Inspired by: https://news.ycombinator.com/item?id=10084449
I would start on the front end and
I would start with looking into Bootstrap and jquery. And look at using PHP to deliver the webservice data to jquery. http://tutorialzine.com/2015/01/shoutbox-php-jquery/
------
I would also google some MVC PHP tutorals to get some idea of how MVC works since alot of modern frameworks are modeled after it.
----
next pick a javascript framework to make a SPA here's some tutorials(middle of the page) on using angularjs with php: http://www.angularcode.com/
-----------
now your ready to swap out php for another server technology. nodejs, RoR, whatever.
---------------------
Once you have that in your pocket you'll be ready to try any of the new js frameworks that are being mentioned here.
- First of all don't worry about the new technologies coming out every day. Rather than that give more focus to architecture. learn more about Design patterns, its benefits, its implementation, Code structuring, Optimization, Scalability etc.
- If you don't know MVC architecture (the most popular architecture) then learn a PHP framework like Laravel or Yii. The framework also teaches you common methodologies like Object-oriented programming, Object-relational mapping, Templating, etc.
- Once you learned any framework, and, of course, like everyone you try to build an application. Go for it. But at this type when you deal with HTML try to improve it slowly. Like learning more about tags and setting up the layout. Updating to HTML5 won't be that difficult. It's all matter in practice and you can practice it while building the application. But don't think about CSS until you finish the app.
- After Building the app then think about CSS. now you spend time learning CSS. Because most of the people think it's a matter of learning the properties and use it. To some extent it's true, but when you deal with real scenarios it's not. A simple CSS issue can bring down the business for an hour. It's very critical. So give a bit time in learning CSS and CSS3. When you learning, understand more about Organizing, Layouts & Web Typography. The terms sound pretty big. But it's very easy to make it as a practice.
- Once you understand CSS, add that knowledge to the app you are building. But before that, I suggest you make a pencil and paper sketch of the page and components. You can search for grid paper (with browser template) download and print it. And use that for drawing, because it helps to calculate the pixel values. and it helps you writing CSS. The sketch acts as a blueprint for the CSS. and Its fun doing. you feel like an engineer.. :)
- After all, if you are still thirsty then learn jquery. after that, Javascript design patterns and then after any frameworks like ReactJS or AngularJs or etc.
- Learning a PHP frameworks help you a lot in learning HTML, CSS, and basic javascript uisng jquery. so its worth trying.
* This is my modified based on my real experience. Long ago I started from system maintenance to a Geographical information system engineer to a backend developer to a frontend developer and now to a designer. and I also travel through the same path you travelled PHP, HTML and CSS. and little bit python. This is just a vague suggestion. feel free to ask more. All the best
Peace
Many of current batch of tools were developed to meet the needs of engineering teams at scale: e.g. Angular @ Google and React @ Facebook. Their heritage is not "hobbyist programmer" friendly. They are great if the hobby is reading about technology. But many many of those opinions embedded in Django and Rails only become natural once a person is deeply familiar with the culture of their communities.
My advice, do the simplest thing that will work and make something. Pick tools that require a lower level of commitment to an overall architecture as the need arises. Stay out of silos and rabbit holes.
Good luck.
If I teleported here from the 90s, first thing I'd need to wrap my head around is how HTML and CSS have changed. I'd be learning a responsive framework (or even hand-rolling it, so you know how it works) like bootstrap. And doing a very basic website.
And if html5 & responsive css aren't enough to wrap your head around at once, I'd create a github account, and start with github pages. That'll let you use the static site generator Jekyll. The combination of all three will do pretty much all you need for 90% of the sites out there.
After that, then I'd look at a stack that lets you have some degree of interactivity and persistence in order to build web apps.... But for now, clean responsive websites would be the way forward.
https://github.com/oddbird/susy
Also for static site generators take a look at:
https://middlemanapp.com/ (Ruby) http://gohugo.io/ (Go) https://github.com/getpelican/pelican (Python)
When you need to go beyond static sites and take a look at the web frameworks - Ruby on Rails is the obvious one, but I reckon that Meteor (https://www.meteor.com/) could be a good bet now that it has matured. Might save you a lot of time when compared to RoR for certain tasks.
You may notice that when late 90s/early 2000s sites get posted to HN, there are often a set of comments on how quick-to-load and readable they are.
I'm sure many people will tell you about their negative experiences and how writing these kinds of "tests" are slow or misleading or a waste of time. But I would say that deciding what your software does--even in an abstract and gradual fashion--gives you tremendous freedom in knowing that all the other choices are just implementation details of a larger design. (As the parent says, a "lower level of commitment".)
[1] https://cucumber.io
https://github.com/pinceladasdaweb/Static-Site-Generators
Let me tell you why.
Not much has changed since the 90's in one area: there are as many opinions and interpretations running around as facts. There's no shortage of time being spent re-inventing the wheel over and over in frameworks that really don't look much different. The end result is most languages have pretty decent frameworks to work with.
A better question is what would be a best path forward for you to dip your feet in and move forward?
The web and mobile landscape is a lot nicer now with the tools that aim to help you get things done quicker, as long as you don't go off their beaten path.
Which two swiss army knife tools could you use to roll out into one thing?
The first big shift is to think mobile first, including mobile web based apps that also work on desktop.
I've jumped into Javascript more so in the past year as node.js has continued to mature. I use my strategically limited time to build value and not spend my time learning like I had to in my 20's.
The frameworks I'm playing with at the moment that provided a good coverage for web applications as well as doing mobile web app dev, as well as mobile app development.
Sails.js (forked to trails.js now) will be familiar to you. This will cover writing web apps and not having to build your own entire stack. Has worked wonderfully for the few projects I've used it for.
To cover mobile development, I recommend looking at ionic framework to start out with. It can connect just fine to a backend like parse.com.
There are no shortage of business and information driven apps (that pay well) that this technology can create with one code base for all end points. There is a great case to build native apps once something like this solves a problem.
If you want to get into mobile development from a higher level to explore, I really recommend a tool like appery.io. It was dicey before in places but now has ionic built in, it's a fantastic prototyping tool for JS apps.
Beyond this, I've always had a crush on Python and want to spend more time with it, but for now Javascript keeps me moving along.
Feel free to reach out if you wanna chat, you sound like you have a lot of experience already.
All of this will give you what you need to built out a robust site. After you are updated and comfortable with these, you may then decide to move onto learning other things such as React, Node, etc.
Learn all the updates to CSS first, to understand how pages are structured without tables. That will help you to move on to jQuery, which will in turn help you understand how JavaScript is used nowadays to work with the page. Once you are that far, you can pursue node.js to get up to speed on server-side JS.
After that, you should be as caught up as you need to be, and will better be able to evaluate all the other frameworks and languages out there, and set your own direction.
> But after work and family, there isn't much time left
If you want to ship ASAP with little time investment, IMO nothing beats Meteor. Skills required: HTML, CSS, JS.
I've built projects with PHP, Rails, Django, Node, Angular, etc ... and Meteor is the framework I recommend to newcomers. Ok, you're not exactly a newcomer, but clearly you've been disconnected many years and you don't have enough free time to learn new tools/languages. You'll need a lot of abstractions (features, deployment, db interfacing, best practices, etc)...
Meteor will help you with this, a lot... And the most important thing: it's a lot of fun!
https://www.meteor.com/
0,02
If you decide to use Meteor use: http://guide.meteor.com/
Meteor is in fact the fastest way to achieve a webapp nowadays. You can learn it in a weekend if you want to, and drafting highly dynamic interfaces is a breeze.
If you want to scale later, in terms of code complexity as well as runtime performance and so on, Meteor isn't that good, but having thousands of concurrent users is a luxury problem to have.
To get an idea out the door, Meteor.
(I'm a fullstack dev who has worked with dozens of languages and even more frameworks, and went through all the popular frontend tech's since jquery, so: been there, done stuff)
Otherwise, everything applicable from back then still is today. Any time anyone mentions PHP on forums like this, there's always fashion-conscious people who jump in to attack it. But I'm still building brand new websites based on it, and people still express their gratitude, never once saying there's any problem because the site uses PHP.
MySQL is still going strong, and there's some alternatives that are compatible, like Percona and Maria.
JavaScript is the same. There's all these frameworks like there are for PHP, but I ignore all that. I never understood why I'd be better off using someone else's virtual language on top of a language. I just use bare JavaScript, and it works the same to me as it did back then. Still have to worry about differences between browsers, but instead of Netscape and IE, it's stuff like Chrome, Firefox, and Edge. A framework can make that easier, but it can make others things more difficult, and it's better to keep dependence on JS minimal anyways.
What I'm getting at is, I don't know why you need to update anything. If you're trying to get a specific job, then you need to use what they do. But for just building things in your free time that work on modern web browsers, you already know what you need to know. You could probably even run the same exact version of server and authoring tools you did before, and it should display fine in the latest web browsers.
It's different if you want to build something like a mobile app, or Windows software, because those platforms changed significantly since the '90s. There's languages now that didn't exist then, and new tools you've never seen before.
But on the web, any text editor, HTML, and any language you want for the backend is fine. Just like I still write .sh scripts, and they get the job done.
It's more important to spend that time on family, and your career. Since the stuff you already know still works, there's not much need to use anything else. Unless you're worried about what the kids think, and how they'll judge you.
"What I'm getting at is, I don't know why you need to update anything"
Shocking advice. There is a huge amount to learn. Any developer coming from the 1990s needs to re-learn all their technologies or they are going to have a very stressful time delivering anything appealing to users expectations in 2016.
"Since the stuff you already know still works, there's not much need to use anything else"
This kind of mentality leads to becoming deadwood and unemployment. Developers must keep learning especially with the rate of change of technology over the past 5 or so years.
I'm building things the same way as I did at around 2000, and my creations are just as relevant today. Most of the fancy JS stuff we could do in the '90s. The new stuff is not about basic websites, but how some new additions of HTML5 work. Most websites do not need those though, and if they do, then you learn those specific things.
I've spent the last week (finally!) trying and in the end succeeding to wrap my head around React+Redux. It took a many many many hours of puzzlement. I began with the react+slingshot[0] @coryhouse made as a starter kit and going through the React docs and Redux docs. I guess my desire stemmed from seeing Dan's demo of Redux's time-travel and hot reloading ability, I was intrigued. I copied the TODO example from the Redux docs and fashioned it to my liking exploring all the parts.
I'm here to tell you that it's not easy. The landscape is still in flux (buh-dum-tish, I'll be here all week folks) and that for every piece of the dev tool puzzle you've two or three options.
I think you can get away with React+Redux on the client side which replaces the V in your MVC. {This in practice means the `react', `react-dom', `react-redux', and `redux' files. _Everything_ else is tooling, but my God so much tooling}. YMMV.
That's as far as I'd go, otherwise you're throwing out all your server-side dev experience, and why would you want to do that?
What I'd like to ask folks is: what happens to my nice static HTML/CSS pages if React+Redux is all JS? Server-side rendering? I'll come back and edit this and put in a few more links I found handy. Do believe the hype, React+Redux is pretty neat.
[0] https://github.com/coryhouse/react-slingshot ---
Edit!
React docs: https://facebook.github.io/react/docs/getting-started.html
React DevTools: https://github.com/facebook/react/wiki/Complementary-Tools
The Video: Dan Abramov - Live React: Hot Reloading with Time Travel at react-europe 2015 https://www.youtube.com/watch?v=xsSnOQynTHs
Redux docs: http://rackt.org/redux/docs/basics/index.html
Redux DevTools: https://github.com/gaearon/redux-devtools/
HTML, Javascript and CSS are still extremely important and they have come a long way since 1990. Forget everything you knew about them and research their state in 2016. You have a lot to learn, but you'll find all three more powerful and expressive today than they were in 1990.
There is currently a big shift in the way clients want their websites to work. In the past (and present) clients were happy with simple HTML pages that were generated on the server and sent down to the client for every action the user performs. Now and in the future, we're shifting towards "Single page apps" which are Javascript centric applications that store page templates client-side and talk to the back end through APIs. Page transitions are emulated with Javascript routing libraries. This means the frontends are more complex but can provide a richer, more interactive experience. To see the cutting edge of this technique search for React + Redux.
Backend development is still important. People generally converge under a simple set of rules for backend development called Model-View-Controller. This is a design pattern that dictates how requests are delegated into your business layer. Investigate MVC as well as Domain Driven Design to get yourself up to speed.
Understand that there is an enormous amount of garbage out there right now. Some things to be extremely wary of are NoSQL databases (they have very limited use cases but are marketed as a silver bullet) and NodeJs (a backend server which executes Javascript but has more than a few shortcomings). Be extremely skeptical of any advice you receive over the internet. There are too many people dispensing advice with no actual credibility because of the ease of access to the Internet.
The best thing to do is to work with some talented developers and build your own network from them. A lot of developers on the leading edge use Twitter and often drop useful bits of advice to keep you on the right track.
And I'd just add that there's no need to jump into a new backend language if you used PHP years ago. Sure it's not as robust or structured but for a hobbyist it can do everything you need and there's still plenty of jobs for it if you want to graduate to an MVC framework.
> Wow, there is a lot of awful advice in this thread.
> Be extremely skeptical of any advice you receive over the internet.
:-D
NoSQL is very, very, very bad when your data is conceptually relational.
On the other hand, when you really have individual documents which can have different layout and don't have much interactions between them, NoSQL can be pretty awesome.
So, just understand what kind of system are you working with before choosing one approach over another.
Are we? I expect 2016-2017 to be a turning point in the history of client-side web-development due to WebAssembly. Is it just my wet fantasy?
RactiveJS - http://learn.ractivejs.org
KnockoutJS - http://learn.knockoutjs.com
These aren't the hottest or most popular technologies, but they teach good fundementals and are easy to get started with, compared to the powerful but complex frameworks like React and Angular, etc.
When you address the problem, don't immediately jump to the newest framework/stack that claims to solve it but instead try and use the majority of your existing skills and knowledge with one or two modifications... even if they are "out of date." Going through the effort of adapting existing skills allows you to better understand the underlying problems as well as re-live (in blessedly compressed time) the iterations that occurred to arrive at the current accepted solutions. There's a lot of wisdom to be found in taking that journey.
Learning the "why" of things is far more important than just acquiring the operational skills for a given technology.
That being said, I'd recommend the OP to dive into modern CSS frameworks (Bootstrap, Semantic UI, Materialize, to name a few) and learn more JavaScript. After that he will probably feel what he likes/dislikes more and find the most suitable framework for his needs.
Not if you want to get hired. We've moved on from that simple model. I don't like it either but ignoring the fact that things are changing is a good way to end up unemployed.
Just to be clear and ensure everyone else understands. Javascript should validate input syntax and make decisions that don't need to be forced onto users. As an example, validate a credit-card matches mod 10 and automatically recognize if it's Visa, Mastercard, etc. Nothing drives me nuts like messing up my card-number only to have to go through an entire HTTP request & response cycle to find out.
What we don't want developers to do is ONLY validate client-side lest they open their back-end to injection vulnerabilities like XSS, SQLi, and CMDi or even name your own price vulnerabilities like we saw early on in the ecommerce space.
Form check-pointing is another good example of Javascript use. It has never bothered anyone that a webpage is saving your form on the client or server in the background.
HTML, PHP & Mysql are all still quite very relevant.
Replace: [table/tr/td] with [div/ul/li] and substitute the borderless tables with the CSS3 box model and you're TOTALLY up-to-date. No lie.
Right-click > Inspect Element > Console > console.log will get you a long way. Treat the JS console as your new client-side command line. Just start typing in function names, and see what autocompletes. Treat JavaScript functions as if they were executable binaries within a shell window. Use jQuery to traverse the DOM with CSS selectors. This behavior is well-supported in pretty much every current, modern desktop browser.
Everything else is quite honestly a fad, and replete with over-engineering pissing contests. I'd add more opinionated snark to this last part, but that would dilute the important parts of this comment, which I do hope reach you well.
The reasoning here is that the heart of the web is, and has always been, HTML, CSS, JS.
jQuery is a natural choice because it's replaced direct DOM manipulation quite elegantly and is used by 80% of websites. The only thing you're missing is server-side, and Node makes this an easy choice by also being JavaScript.
In short, it's all about JavaScript. If you can code, you'll do well. Keep practicing functions and with Node you can practice command-line apps, or server-side apps as well. Good luck!
You really do need some responsive design, particularly if you care about UX and SERP rankings.
SPAs are only really necessary for certain use-cases, and while having a strict client-server separation does have benefits, it also incurs upfront costs.
You can still get by perfectly well generating HTML server-side with PHP or Perl and MySQL. You may want to check out MariaDB, a fork of MySQL by the original creator if you haven't heard of it. Postgres also finally just added upsert (INSERT ON DUPLICATE ...), which might be the last real barrier to migrating from MySQL, so if you don't have a ton of lingering MySQL-specific knowledge, you might want to start with Postgres, as it seems to be the default in a lot of FOSS situations these days.
There's certainly been lots of innovation in server-side web frameworks and ORMs in PHP and Perl since the 90s. I can't speak to Perl but Slim is a good PHP microframework and Propel is a nice ORM, though there are also more heavy-duty frameworks such as Laravel.
If you don't mind learning a new language, I would recommend Python for any backend web development that doesn't require squeezing out as low response times as possible, which gives you the excellent Flask + SQLAlchemy, or Django if you prefer a little more hand-holding.
You can still use JavaScript to add interactivity without making a SPA. jQuery, Backbone, and React would do that in increasing levels of abstraction.
In the grand scheme of things, the changes to HTML/CSS since the 90s have been relatively small. If you use Bootstrap you might not even have to worry about them too much.
In summary,
- MySQL or Postgres
- Generate HTML server-side starting with a PHP or Python microframework and ORM, upgrade to a batteries-included framework if you discover you need it
- Use Bootstrap
- add interactivity with jQuery or (if you want to learn it) React (React-Bootstrap is nice); switch to full SPA if you discover you need it (in that case you'll probably want react-router, SystemJS, and JSPM)
- use Heroku or equivalent to avoid system administration
- with the combination of cross-browser libraries (jQuery, React) and the latest versions of all the popular browsers having fewer and fewer inconsistencies, you actually don't need to worry too much about how to support multiple browsers unless you want to support really old browsers that only make up a few percent usage share combined.
1) Focus on HTML/CSS and use a static site solution (github pages + jekyll is hard to beat). When you need more, learn the JS necessary to make it happen, and perhaps move beyond static and into more JS-front-end territory as needed.
2) Tap into your PHP memories and take a look at Laravel and specifically laracasts.com. I'm not proselytizing (I actually don't use php or Laravel), but it's a really solid framework with a vibrant and heterogenous community. It may not where the cool kids are, but it's a great way to be productive and it seems to be constantly improving.
Good luck!
Given that I don't know the score of the answers, such "+1" answers are useful to me. Thanks!
I intend to learn RoR in the nearby future as well, since I'd like to do more remote work and less "on location" work (which I currently do as iOS dev).