Ask HN: What big programming productivity gains you see happening in 5-10 yrs?
On the other side, there is a definite shift towards "backendless" applications, where frontend talks directly to the DB, either via autogenerated ReST or GraphQL APIs or via proprietary tools like Cloud Firestore. This is good for MVPs.
Frameworks like React & Angular give you decent building blocks to create SPAs, but the learning curve & effort required to create ambitious applications is very high.
There is a proliferation of "Low Code" frameworks which allow you to design drag & drop UIs & connect them with APIs. But, it feels like going back to "RAD" tools for the late 90s which led to a lot of spaghetti code. Also, some of these are prohibitively expensive.
One noteworthy change is UI design products which are trying to produce the code from UI Mockups. Relatively primitive at this stage. A breakthrough here can definitely be a big productivity booster.
Another productivity booster is Cross-Platform frameworks. It's already here, tried & tested. We know the trade-offs well. It requires a huge amount of effort to create & maintain a cross-platform framework. Big companies are already tackling this.
Considering this background, what do you think will be a breakthrough innovation in programming which will enable programmers to deliver ambitious web/mobile apps at a very high speed.
105 comments
[ 48.8 ms ] story [ 2946 ms ] thread[1]: https://news.ycombinator.com/item?id=14836653
[0] https://visualstudio.microsoft.com/services/intellicode/
- Compilers with even more powerful implicit behavior- forget automatically creating Get() and Set(), we'll be creating entire inheritance structures with one function definition.
Hooray, it's just what I always wanted. A deep nested inheritance chain that not even the original implementer really knows well.
So we'll see a shift away from "developer specific boilerplate" in the same way libraries have abstracted a lot of basic setup boilerplate.
You'll say "initialize a web service with these models" and the IDE will build out the majority of the project.
(In general, software engineers becoming vaguely aware of tech invented in the 1960s and 1970s is a huge productivity boon. If you, as a developer, want to impress your peers, you should take a couple hours to read what software engineers thought was obvious prior to 1980, when software engineers had a strong background in software engineering.)
To answer parent, I actually think better understanding of personality types and how manage people better will come with far better productivity.
The jungle of technology alternatives of how to solve business problems, causes a lot of unnecessary fights. It doesn't matter if you choose React, Angular or Vanilla JS. If your team is fighting each other, your team is not productive.
With this in mind, don't hire people that always agree with you, you always need someone to challenge you.
https://en.m.wikipedia.org/wiki/Constraint_Handling_Rules
If you care about the subject this much and you think that everything was better before the 80s, then why don't you link to or name some sources you value?
The industry oscillates. Each oscillation is a mirage that presents itself as a productivity gain but is in actuality an echo of the past.
Are the techniques we use today really more productive?
For many of the informational based apps, it's totally overkill to create a native experience. One app, responsive views, and your small team is suddenly incredibly productive.
The OP mentions "backendless applications", and using Javascript and the browser as your platform feels like the same kind of trend.
Sure, all those layers are still there — OS, TCP/IP, raster — but we've settled on a standard simplified foundation that's good enough and that everybody implements, whether it's Safari-iOS-touchscreen-ARM-LTE or Edge-Windows-mouse-x86-Ethernet.
"Static web applications" likewise — maybe instead of your own backend you call a few SAAS's that you've configured in a GUI rather than written code for. The point is you've reduced the number of layers you have to maintain, while still targeting a huge number of users.
In general, the trick is settling on a foundation. The web has evolved rather than being handed down from on high. What consensus will the next 5-10 years of evolution bring? Or will new platforms appear? Will Fuchsia show up and look a lot like the web?
Maybe the quality of that foundation can be measured by programmer productivity. A web standard that's consistent from device to device is a boon to the whole world. Thank you MDN for telling me what works, and where! https://developer.mozilla.org/en-US/
Offices for everyone on staff that like to work in a quiet place and pubic areas for people who like to work in those places .
Also, the minimization of time spent in meetings .
I would argue that this should be "the minimization of unstructured/unguided/unclear meetings".
Tbh I've seen a non-trivial number of instances where engineers have wasted their own time or someone else's by not participating in organizational meetings - either by doing redundant work or having an unclear image of priorities/blockers/help needed.
Nobody want's to waste time in meetings, and most people who call meetings can't run them well. BUT having a well planned and executed meeting (30 mins tops) can save hours if not tens of hours of work time per week.
I also believe that the "just let the devs do dev work and avoid meetings" mantra is border-line meme status and (in my opinion) stems from toxic anti-social behavior, rather than efficiency. However, I also believe that meeting time per week should have an upper-bound (something like 4-6 hours, including a 15-min daily standup) to better enforce efficiency, rather than throwing 1-hour meetings all over the place and hoping they don't use all the time.
They surfed on the "everything must be Google-scalable..." trends. They built hundreds of interconnected micro/nano-services, upgraded networking infrastructure ($$), OAuth federation, ...
What they've got? Network latency/congestion/..., security and API versionning management nightmare, unresponsive applications (tooooo manyyyy APIs calls), performance issues, circuit-breaker, caching, ... Ok you see the big picture.
Now, the returned back to a more "monolith" design. They merged many services together in one application (services that wasn't called by anything else). Everything doesn't need to be exposed as a service. This simplified security management, reduce a lot the network usage and simplified bugs investigation/fix.
The difference is that now, their new monolith designs are more modularized than before. Everything is now in a clear module (call it jar file, lib, package, ...) with a clear contract/interface. This is what I like to call "intra-services" : clear services/features separation minus the networking/security moving parts (and all band-aid solutions to support it like circuit-breakers, distributed caches, ...).
If one day you are the size of Google, Netflix, Facebook, Spotify, ... you will probably have the money/manpower to implement it the "Google way". Until then, KISS!
Note: English is not my first language.
Quality, Speed, Price. Pick two.
What is the driving force to "...deliver ... at a very high speed?" It's easy to assume that from the list above quality would be the one to suffer. Doesn't anyone here on HN ever get tired of being everyone's beta bitch?
I also like the point that the "revolution" is in one aspect, not the whole thing, and it requires changing other aspects, and is therefore much less of a net win than it appears...
More hopefully, maybe new language developers will put more work into easier and easier FFIs? How often have you thought "I wish language X could catch on, but all the useful libraries are in language Y?"
I also think more job candidates will reject interviews that waste time with unrealistic homework assignments, marathon on-site interviews, etc.
Finally, I think productivity losses and health issues related to open-plan offices will soar, but companies will continue to be disingenuous and act like it improves collaboration or saves money when it’s uncotroversially flat false.
Any ambitious application is going to require a high learning curve and lots of effort. Otherwise it wouldn't be ambitious.
React and JSX revolutionized the act of writing HTML
GraphQL revolutionized the act of connecting front end and back end
But for CSS... SASS, SCSS, LESS, and such are by comparison pretty pedestrian tweaks on vanilla CSS
SASS/etc help manage the complexity of CSS, but they don't simplify anything at all. I think there's a scope problem here: the styling and layout of an application isn't just a bunch of selectors and styles in CSS. It's the class names and structure in the code, it's the implied connections between the expected rendered layout, it's a private language of expected elements and their semantics. You can't simplify that just using CSS. We're still waiting on someone to come up with a combined approach that actually works. I personally eagerly await someone's genius idea!
I agree with this point.
> React and JSX revolutionized the act of writing HTML
I see nothing revolutionary in React.
> GraphQL revolutionized the act of connecting front end and back end
OData existed before GraphQL and still does.
I would be so, so happy to see a UI framework that runs (well) on Windows, Mac, Linux, Android, and iOS. My druthers would be for it to have bondings to a JVM language (Kotlin is my happy place these days), but I would be okay writing in any similarly productive language.
Flutter is trying to get there, but it's not a viable solution on the desktop yet, and somehow doesn't even have a decent HTML widget. I do like Dart, however; it's similar enough to Kotlin/Swift that I'm comfortable writing it, even if I have to look up exact syntax now and then.
Electron wants to solve this problem, but we all know the arguments about its bloated runtime and egg-cooking power usage.
I suppose Progressive Web Apps and WebAssembly have the potential to solve this, too.
Also, what about Xamarin/C#? Going from Kotlin to C# should be pretty smooth and Xamarin is supposed to be pretty usable.
I use Kotlin mutli platform. Share the scss between react(KotlinJS) and Desktop(tornado).
The future of running Autodesk, Adobe software and AAA grade games on the web is coming nearer with WASM.
I still remember when people were excited by the productivity gains from Ruby. "No time wasted wrestling with casts and typing".
The underlying trend here is toward more pragmatic language design, and I think this is definitely a trend that will continue in the near future (5-10 years).
Overall I feel there is much more language development going on now compared to may 2000-2010. I am not a big fan of JavaScript but I feel its rise has put pressure on other languages to keep up.
I'm not sure that speed-to-market will be where the breakthroughs are. But constraining myself to that conditional...
The best one I can think of is a library of curated, easily embeddable snippets. Like Helm charts for code. We already have package managers, but as the industry grows more and more with a larger number (not necessarily percentage) of developers churning out sub-par code, companies are going to want to leverage reuse sans fear. You already see this curation with some languages/ecosystems having sets of blessed libraries, but a library is too high of an abstraction and it is language specific. Some group one day will offer embeddable, curated snippets (or entire libraries) that follow a certain set of rules to give confidence to their users and they will apply those rules (with language specifics) across runtimes. In both good and bad ways, some systems may end up being a walled garden of code where they only accept this curated code which, as walled gardens can be, are good for the users (i.e. devs referencing the code) and bad for the devs (i.e. devs writing new components being forced into others' rules).
Would you feel better with a "Guaranteed by StringentCodeTrust(tm)" seal on a library/repository you reference? A non-pragmatic middle manager at Big Corp might.
I feel like we have finally arrived at the time when more people accept no-one (or at least, no-one outside a tiny set of people) should be using languages with undefined behaviour, or unsafe memory accesses by default (looking at you C and C++).
If "we" want to be taken seriously, and as more of the world relies on computing, we can't be building on a foundation of sand and saying "Oh, as well as every programmer is clever enough, all the time, we'll probably be OK".
Also, looking at things like the Linux kernel, they are moving to add as many safety checks to C as is reasonable. Clang is adding a "all stack variables are initialised" mode.
Or perhaps, we just need our programs to be 20% slower? Would you buy a house which was 20% cheaper, but if a plumber was having a bad day there is a significant chance your house will explode if you turn all the taps on at once?
There is no silver bullet:
http://faculty.salisbury.edu/~xswang/Research/Papers/SERelat...