I do my best to keep up with the latest and greatest in the CS world both on the academic side as well as the professional one. That's not really possible, but I do my best. When I have a small project to work on I'll some times use it as an excuse to play with some recent technology. Over December, I wanted to write an application viewer to use for company / student internship matching. I started by looking at React but ended up using Vue.js which I liked much more for a variety of reasons.
The viewer served it's purpose but I think it can be turned into a much more comprehensive student / employer internship platform. I tried to steal a few minutes over this past week's spring break to start a rewrite using another toolset, Clojure, Clojurescript and Reagent. I'm really liking the Clojure stack and using Emacs and Cider for the IDE is really blowing me away.
What I've noticed is that for every new language of framework you also have to learn a whole set of ancillary tools.
It didn't used to be that way. Back in the day, things were much
simpler. I remembering doing work at Goldman Sachs, it was as simple
as typing something on the command line like
cc file1.c file2.c
file3.c. I of course had to be cutting edge and use fancy modern
tools like Make. What's more, the tools I used in industry were very
similar to what I used in college.
We now live in very different times.
A typical React or Vue project is going to need a project.json and webpack.config.js file and sometimes some other files as well. Check out the links. They're from a simple project template I found online. Far from simple.
When I was playing with Vue.js a couple of months ago, I ended up using Webpack to convert the source code into the final JS, take care of live-reloading, and in general manage the project. I still have no idea how most of it works. I don't know if it's just me but I'm very uncomfortable relying on tools that I really don't fully understand to build my systems.
The Clojure world is little better with Leiningen and Boot. If you don't believe me, try to make heads or tails of this.
While it's true that as a professional you'll likely use one set of tools on a day to day basis and you'll eventually get to know them that doesn't mean it's not a good idea to prepare kids for what's to come.
On the K12 side we have drag and drop languages, specialized learning IDEs like BlueJ, simple cut down IDEs like Dr Racket and completely online environments like repl.it. All great starter tools that insulate beginners from the complexities to come. College's might get closer to the "real world" but just a tad.
Don't get me wrong, I like many of the tools used in K12 classes and there's far too much complexity in the professional world to throw at beginners. If we look at a student's entire school career, classes are already so packed with material it would be hard to really prepare kids for the real world within their classes. You could take that tried and true teacher / professor technique of just requiring it and having the kids figure it out on their own but that's really just downright abusive.
I don't have an answer for this one.
I have my kids use tools like Git and GitHub early along with using testing frameworks and external libraries. I also try to move my students to a general purpose programmable platform like Emacs or Vim. I think these are sound practices but students will still have a big learning curve when they finally get to industry.