I don't really hear people call vim or emacs old fashioned too much anymore. There are a lot of new vim and neovim and spacemacs users out there.
The social aspects of coding are very nice too. It's so great to be able to search GitHub for code to see how other people solved a similar problem to one I might be having.
How old are these concepts? When I read this, it reads more like, "things I was unfamiliar with before, but I've heard of recently".
Well, the age of a concept doesn't matter much.
What makes it old or modern is not the history of its invention or early years, but when it's popularized.
The interesting consequence is: if you want to look for The Next Big Thing in programming languages, just go back 20 years!
Most of the "old languages" did not have this problem. This was a product of the 90s when people built a bunch of stuff really fast without stopping to think about whether what they were building was really a good idea.
So, it's a couple of decades later, but that part of the 90s spirit is still in full force today, but there are many many more programmers. The logical conclusion is that the garbage dump being built today is way worse than the garbage dump built in the past, and that should scare you if you think typo debugging was bad.
And i can't help feel we had a similar reset with the iPhone intro, again because of a split between desktop people and mobile people.
All the software is getting slower and more incomprehensible, and they think it's getting better.
P.S: Voting on HN does nothing to change anyone's mind. If you don't reply, you're basically just saying "nuh uh!".
There is no such thing as modern programming since the fundamental principles of what is considered "good" programming are largely unchanged for the past 40 years.
Been an engineer for 25 years now, and so far I have not seen any fundamental changes in programming itself. This blog post also is a testament to that, as it just talks about things surrounding programming and mixes that with a few principles.
It's pretty surprising and to me a little disappointing how much programming has stayed the same. There is just much more tooling.
Tooling is just driven by one of the primary attributes an engineer should have: an abundance of lazyness that strives to find solutions for the long run.
In a similar way, things like braces placement (or no braces like in Python) or capitalisation can be kept out of source code and in a style sheet.
(That way, I'll never have to dig through white space and formatting changes in git logs any more to find actual changes to the code.)
In a way tabs are an invitation to style them how you want.
However, it doesn't necessarily have to be the plainest of plain text. Even today, it is ridiculously popular for people to use syntax-highlighting, which adds color to everything they do. It might not get stored to the disk, but it shows that the experience of writing/reading code goes far beyond the purely textual.
Other things to consider: Code-block folding; call-graph and type-hierarchy visualizations; GUI tools for files that are half-generated and half-written; the way that diff tools turn text differences into a visual experience...
In other words, while storing your creative output in a simple and consistent way is good, the craft of programming has organically added many visual interactions to match the strengths and weaknesses of our human brains. It's not unreasonable to expect more of that, even if the core remains a written conversation with an idiot savant computer.
Writing a non-plaintext editor is a huge UI/UX problem, however...
Smalltalk environments used to it, Lisp machines could do it, etc.
Even the combination (programmer edits code as text, but in fact just manipulates a structure, which on the programming environment has all the cool properties of live code --knowledge of structure, easy refactoring, etc-- but at the end is again saved as text and works with all tools like Git etc) is trivial to make.
Configure a tool like clang-format/uncrustify, and make it run automatically by your test scripts.
We've been doing this at work for years, and I'm still amazed at the results: nobody cares about the coding style anymore, and the code is perfectly homogenous (and the logs/diffs are 99% clean from formatting concerns).
They are kinda sorta realising the dream of pervasive code reuse. In a low-friction buffet style.
Language-specific package managers tie you into a single language. It's hard to use multiple languages in a project, even when that would make sense, or to migrate to a new language.
You end up needing a separate layer on top of the language's package system. Big projects like Unity have their own package managers and build systems.
I think it would be much better to have a generic package system that can be used for everything, and a generic build system that can be used for everything.
Admittedly, existing generic package managers and build systems aren't very good! So maybe this is a bad idea and it's just too hard, or maybe there's some key insight or advance we're missing.
I think Google's build system Bazel is along the right lines. Unashamedly aiming for 100% correctness, so it's really reliable and therefore usable for all build tasks.
I'm fine with this, as long as it's my code format style.
Version control. Twenty years ago, it made sense to write your code on your desktop and send the new code (as patches) by email. But this only makes sense when the pace of collaboration is slow. Today, this would be insane. Anything less than Git is backward. Note that even Microsoft builds Windows using Git today.
Version control has been in widespread use for over forty (40) years. SCCS (Source Code Control System) was released in 1972 -- forty-five, yes forty-five (45) years ago. https://en.wikipedia.org/wiki/Source_Code_Control_System
The widely (and still) used Revision Control System (RCS) was released in 1982 -- 35 years ago. https://en.wikipedia.org/wiki/Revision_Control_System
Concurrent Versions System (CVS) was released in 1990 as a networked extension to RCS -- twenty-seven (27) years ago. https://en.wikipedia.org/wiki/Concurrent_Versions_System
The Subversion version control system was released in 2000, seventeen (17) years ago and was in widespread use years before Git. https://en.wikipedia.org/wiki/Apache_Subversion
There are, of course, many other version control systems dating back decades in many cases: Perforce, Mercurial, Visual SourceSafe, and others.
Version control has been in widespread use at many companies and organizations at least since the 1980s and has been in widespread use in many open source projects specifically for decades. Many open source or free software projects used CVS or SVN or other version control systems before Git or still do.
There is nothing new or modern about version control. It has been standard practice in software development for over thirty years.
https://en.wikipedia.org/wiki/PVCS
Not long thereafter Visual SourceSafe got traction in my workplaces. Then along came CVS.
I can see why the students he mentions are not necessarily buying this stuff.
That being said, I agree with the idea that things have changed a lot and tooling has become a lot better.
'80s " " : mostly structured
'90s " " : mostly OOP
'00s " " : OOP, garbage collected
'10s " " : dynamic scripting languages
2017: multi-paradigm
The package managers on language level changed much.
Also I have the feeling that MVC, MVVM, MVP etc. is over and it's Components all the way.
Just because the people who invented flux didn't know the word "model" doesn't mean it's a new pattern :-)
Provide CLI tooling and you can build integrations with any editor! A while back Microsoft published Language Server Protocol [0]. I'm sure there must've been previous attempts achieve this, but I'm not aware of any that were widely successful. Meanwhile LSP seems to be gradually growing [1]. Having a common interface seems like such a sensible idea too! With that said, I think the software community has largely standardized on Unix. Is it unreasonable to expect OSs to implement a Unix-compatibility layer? Given that Windows is working towards that goal, is there any other major holdout?
Code formatters make tons of sense. It lets you shift the responsibility over to the computer. I think it should also be possible to have an editor visually format code in your own preferred style, while saving the output in the project's preferred style; although I haven't seen this implemented by any editor yet. In the web community, Prettier [2] has been growing increasingly popular. It currently supports JS, CSS, and GraphQL in many of their flavors (e.g. JSX, Flow, TypeScript, etc.); and there's ongoing discussion about supporting others like Markdown [3], and probably others which I haven't seen.
Dependency management is one of the big pain-points of dealing with older languages. I want to be able to pull in APIs that correctly solve my problem without sacrificing cross-platform support. Sometimes I want to load multiple versions of a library. Setting up a working build environment shouldn't require multiple hours or days of work. As an example, I've wasted multiple days over the last few months trying to build android for either my Pixel or Nexus 5X, using Ubuntu, and I haven't been successful. I can't count the number of times I've lost interest in projects because I couldn't get it to build after spending countless hours, sometimes days, trying to setup a working environment. I have my fair share of criticisms of the web development community, but at least it's never a problem getting one of their projects to build.
Testing is important! I think this is something that Swift is doing well. They have a list of projects [4] which they automatically test against the development branch in order to understand the compatibility impact of their changes. With their latest set of breaking changes they also provided tools to help gradually migrate to the latest version [5]. I'll note I haven't worked on a serious production-ready Swift environment, so I don't know how effectively these tools work for a serious real-world projects.
Version control is a must, but I'd also suggest trying out more tools, rather than limiting yourself to git. I've used git professionally, and I can work with it without breaking anything. But plenty of its commands are needlessly confusing and quirky, and it's too easy to shoot yourself in the foot. Relevant XKCD [5]. I've had cases where I shot myself in the foot and Time Machine's file history was the only thing that saved me. Fossil [6] is a really nifty alternative, written by the creator of SQLite. It's much friendlier, and it includes an issue tracker and wiki! I've been happily using it for some of my personal projects. It's not the right tool for every problem, but it never hurts to try out something new.
[0] https://github.com/Microsoft/language-server-protocol
[3] https://github.com/prettier/prettier/issues/2444
https://www.native-instruments.com/en/products/komplete/synt...
http://rawkes.com/articles/an-introduction-to-noflo-and-flow...
Please. Stop. Typing.
How much of your coding is spent on syntax, structure, and scope - jobs that the computer often does much better than you? What benefit is there in typing out the same loops and so on over and over and making people read your code in order to figure out what the structure should look like?
The reason people drew flowcharts by hand and then typed out programs was because the computers couldn't interpret complex diagrammatic programming in real time back in the 70s. This has changed, but people are still typing and think that color-coding and autocomplete are pretty snazzy features in a modern IDE.
I understand the 'non-textual programming' evangelism as wishing for something 'better than textual programming', but it's like people wondering whether there isn't something better than math to describe Nature. Unless you come up with something, there isn't and you can't claim there is or has to be. Some small parts can be described by diagrams and words perfectly. For the most part: math or bust.
This is why AutoCad has a command line.
I agree with you on syntax, but a computer definitely does not do structure better than me.