How will you be programming in a decade?
dave.cheney.net
dave.cheney.net
This is not backed up by any facts. First of all, the graph shows desktop PC shipments. Laptop shipments haven't drastically changed:
http://www.statista.com/statistics/272595/global-shipments-f...
Secondly, the other logical explanation is that most machines of the last five years are still fast enough for general purpose operating systems. So, people are simply upgrading far less often.
The other outcome is the developer PC continues to exist, in an increasingly rarified (and expensive) form as workstations migrate to the economies of scale that drive server chip sets.
Or the same cheap processors that run embedded devices simply become fast enough to handle normal desktop workloads. So, why would they be more expensive? The Raspberry Pi will probably be good enough as a modest development workstation in a couple of iterations at 30 Euro. Heck, some people do their work on Chromebooks running Crouton.
I don't think hardware is the problem. Every kid will be able to afford some device to start tinkering. More worrisome is the move away from general purpose operating systems to walled gardens, plus reliance on proprietary web applications. For this reason, we need a flourishing Linux/BSD/FLOSS ecosystem.
And, on the other end, open hardware is absolutely booming with computers that cost less than shipping. I hope to see open software and hardware flourishing even more as this trend continues.
My desktop at home is from January 2010 (the only part I've replaced is the early-generation SSD that went bad).
My work computer -- that I also do software development on -- is a laptop with a docking station.
Raspberry Pi is fast enough to use in "teach kids programming" workshops, and cheap enough to have the attendees take them home after.
.
My 2 year old phone has a crack in the corner of the screen, and sometimes gets confused about if/where I'm touching it. Plus it sounds like Project Fi doesn't work with it, which I take to imply there's something outdated about its radio. There's a good chance I'll be upgrading as the cell service market shakes itself out a bit more.
We don't update very often. Currently I'm using VS2008.
Legacy is here to stay. There'll likely still be people hacking on COBOL in 2025.
With Vim (or Emacs)... that's kind of obvious.
In other words: I need a terminal. There's no need for me to have a beefy computer on my desk, because I can leave that under my stairs and not have to worry where I work on it from, and mix and match when I use my home server or cloud instances.
The laptop I type this on basically functions as a luggable terminal (it's a 17" one; I often pack my 11" Chromebook with it when travelling so I don't need to pull out the 17" one for minor stuff...), and not much more.
The only thing that will make me upgrade my laptop is improved graphics performance, better screen or better keyboard - everything else is pointless for me.
Meanwhile almost every mid range Chinese tablet today (mid-range = ca. $100-$200 these days) seems to be Atom based and supporting 4K HDMI output and dual-booting Android and Windows...It's getting very close to the point where a tablet or phone + bluetooth keyboard + a HDMI connection is sufficient or me to work. 4K LED TV's are so cheap now that I'm tempted to experiment.
My main laptop is a 17" Vostro, it's an older i5 (2430 I think) with 8GB RAM, it's absolutely fine for all the development stuff I do on it, if I could get something of that speed with an awesome screen and keyboard for a decent price I'd be so happy.
I keep looking at the Thinkpads coming on the market second hand but while they hit two out of three (similar spec, good keyboard) they are still all 1600x900 or so.
I want 4K already, drives me crazy that it's easier to get a tablet with an insane screen than a laptop.
Could do something very interesting with that :).
https://www.youtube.com/watch?v=db-7J5OaSag
Imagine what we could do in 10 years with ^ if the technology takes off this time.
Keyboards and screens are interchangeable
> Sure you can get a bluetooth keyboard but then why didn't you get a laptop in the first place?
Why not both? It is nice to have a lightweight option that can fit in a large coat pocket, yet be able to "scale up" to a full size laptop or a 42" (or larger) 4K display without having to move between computing devices. As hard as e.g. Google and others try to make transitioning between devices seamless, we're nowhere near the point where that is good enough, but we are very close to the point were a tablet or phone is good enough to act as a terminal of the form I described with the help of a keyboard and screen.
I see it as the same thing. Maybe keyboards and monitors will be rare, expensive, specialized devices. But you'll buy them and connect them up to the same kind of computing device that regular people use. There's no reason for the underlying computer hardware to be anything other than commodity.
edit: what has changed is size of data sets I can work with and speed at which I can manipulate them. 10 years ago 300-500 GB of data was quite a lot of data, now it's something I trivially work with on a middle of road computer using normal software without really having to worry too much about performance. Loading 20-30 GB data sets into memory is something I just do without really thinking about it, as is visualizing them in 3D.
Basically everything is the same, it's just 10 times bigger and 10 times faster
In 10 years, I will most likely be using a keyboard connected to a screen. The environment will be a combination of local and remote, just as it is now. Are you saying keyboards are going away? Will I need to run fingers 2.0?
I find that hard to imagine. I'm running a pretty powerful desktop, and I was having a hard time just editing and grading RAWs in Resolve yesterday.
There are still large numbers of businesses that use desktops. Everywhere I look there are desktops. Tablets are displacing some but not all in business.
Depending how cheap your employer is you may not get both a desktop and a laptop. I had no desktop from 00 to 05 so that some beancounter could get a bonus for not "wasting" a tiny fraction of our total salary on giving my team both a laptop and a desktop. I don't miss that place, but most of the world works under conditions like that.
So desktops are for people who absolutely cannot ever be imagined to work from home, for practical or primate dominance reasons. That's a rapidly shrinking segment of the employment population.
Ironically by plugging a large display and decent mechanical keyboard into a "laptop" we're just reimplementing desktops the hard and expensive way.
I mostly work on my laptop wherever I am -- in office, at a client, at home, on the commute, at user groups, etc. I'm comfortable with using my laptop's keyboard although I do enjoy having additional external screens when they are available.
But I know plenty of people (including non-developers at non-tech companies) who do most of their work at their desk with the laptop plugged into a docking station with external peripherals -- keyboard, mouse and screens -- and only use the laptop on its own for meetings or as part of a BYOD policy.
Desktops are non-portable. Laptops are portable. Tablets are ultra-portable but 1) not powerful enough on their own (good luck relying on a remote desktop with a dodgy Internet connection) and 2) not as comfortable to use for many professions (due to size constraints, even if you have a physical keyboard -- less so if you just need a dumb device to click through PowerPoint presentations).
Laptops are a compromise between a desktop and a tablet. Laptops with docking stations can replace most desktops (except for high performance scenarios -- but for reference my 15.4" laptop has 4 cores, 32 gigs of RAM and an nVidia graphics card; good enough for most things other than bleeding edge AAA gaming).
The benefit of a laptop with docking station over a desktop is portability. Desktops are only really required if you need levels of performance you absolutely can not gain with a laptop or that would make the laptop insufficiently portable (e.g. due to battery life -- I can generally get away with a meagre three hours away from wall outlets but many would prefer a longer battery life over the raw performance).
Human language is ambiguous. Ambiguity results in errors. We do not accept errors in machines because we expect them to outperform humans. When you begin to formalize human language in such a way that it becomes unambiguous, you effectively just create a new programming language.
The unreliability isn't a quirk of the system. It's an inherent limitation of the medium. Even the best AI can't read minds and even if we had the technology to do it we'd still have to deal with the fact that even mind reading won't yield the correct solution (it'll just yield the solution you think is correct at the time).
We won't be able to get rid of programming languages (or programmers) until we create AIs that can improve themselves autonomously.
What you are right about, though, I think, is that we'll see a shift towards more declarative programming. While declarative programming has been around for ages it seems to be making a comeback.
Exactly. This is why professional jargon (a) exists. Pick a noun in computers and programming. It has another meaning in another context.
This is why contracts are written in "legal English" (b) and not in normal English.
If legalese were as unambiguous as you seem to think it is, most case law could be fully automated to the point we'd barely ever need actual lawyers and courts.
The only perfect language is the language of mathematics (if we ignore conflicting notations and definitions often being relative to a specific -- though typically well-defined -- problem domain).
As soon as it involves the real world, things get messy and the wider the margin of error becomes. Physics and Chemistry tend to work relatively well (unless you try to accurately predict complex systems). Biology a bit less so. Psychology is where things start to fall apart. Sociology is where it completely breaks down.
But even legalese isn't as well-defined as mathematics. Simply because it has to refer to pre-existing concepts from the start or else it wouldn't be of any actual use (e.g. what's the point of defining "theft" without referring to any real-world interactions -- but once you involve real-world interactions you've left the rational objective domain and rely on the subjective experience of human observers).
That has always been the case, but I believe solvers for general programming will change things dramatically. The point of a solver is that you give it a problem in a formal, relatively unambiguous language, and it finds a proof. At the moment this really only works for maths problems, and even then you often need a specialist solver for the type of problem. General solvers are coming though, and they'll expand beyond maths and they'll accept more and more ambiguous language - often that will mean they come up with the wrong solution, but that's just a matter of iterating until something is correct.
I'm not suggesting one day you'll open up Notepad and type "The user is in a dystopian world full of Raiders" and get Fallout 4, but I strongly believe you'll be able to write "The first page is a form with inputs for name, address and email. When they've completed that form successfully they go to the product collection page." and you'll get the beginnings of an ecommerce app.
In small ways we've already got that sort of thing (generators for various frameworks). It's only going to get better.
Non programmers do program a lot, they just don't recognise it as such. What are formulas in Excel if not programming?
Yes, there are plenty of non-programmers (as in: people who are not identified as programmers by their job title or self-description) who program (including creating amazing monstrosities in VBA).
Describing what a programmer does as "writing code" is only accurate to the same extent that what an accountant does can be described as "putting numbers in spreadsheets". Yes it may be a part of a typical professional's daily work, but even if it is a necessary part (which can be argued), it's not sufficient.
Programming involves a lot more than just writing code -- and that's precisely the part you can't replace by creating a more approachable programming language and what I mean by "learning to program" being what non-programmers typically don't want to do. This is why "thinking like a programmer" is a thing that is separate from "learning programming language X".
Well, my phone is perfectly capable of compiling my software today, so why will I offload it to a server 10 years in the future? If your answer has any mention of "battery", please explain how using a wireless network to transmit the entire software twice will use less energy than simply compile it at the device.
Servers, desktops, laptops, tablets and phones are all here to stay. They'll all get more powerful, cheaper, and more convenient. None will go away.
I don't even know why you would care about the energy consumption caused by wireless transfer except if your software doesn't need to be compiled because it's interpreted or your codebase is tiny. Also since you never talked about speed, compiling on a server can still be significantly faster than compiling on a phone.
By the way, why do you pretend to be a caveman? Can't you just think a little bit ahead? You don't send the entire software twice you only send the changes and assets don't have to be transferred back to your phone.
Ten years ago we were in the middle of switching from wired desktops to laptops, but laptops just weren't portable enough due to weight and longevity when disconnected from the wall. Today this is still there case as our processing needs have increased as our laptops have become more formidable. I expect in ten years we'll still be in the same position.
What has been happening on the phone/tablet/watch/etc side of things however is that we're able to do all of our non coding tasks on the go in a less distracting way, such as responding to emails, retriggering failed code builds, or even reviewing code and merging pull requests. But actual programming will be crazy slow without a tactile full sized keyboard, things we've relied on to code with since the dawn of calculators/computers, and that won't change until we're programming software graphically, i.e. as if we were using Origami with Quartz Composer or RelativeWave Form, as opposed to textually.
Your job will be to understand a business process, and build the app out so that the app supports the process.
There are domains where visual programming is common (i.e. Control in Simulink, Data acquisition in Labview, pure data in audio), but they are domains where you don't really need to scale the complexity of the code, so the parts of the ecosystem that enable scalability (i.e. automatic and deterministic formatting of the visual representation of the code, version control) are underdeveloped.
There is a cognitive load issue where most people are not very good at 3d (source, the intro to drafting class I took). There is a self selection effect such that all the people "we" know are good at 3d games, but most people in general are extremely bad at 3d. Then again most people in the general public are also awful programmers or procedure designers in general. Most people are not draftsman or programmers, although this is a political opinion in direct opposition to the stated goals of the "everyone must code" movement.
I'm old enough that I was around in the previous 3-d fad, the VRML era, and there were language tokenizers that could translate source code into very abstract 3d structures, although in practice it was completely useless.
Looking with a liberal arts perspective, its like asking why sculpture never replaced literature, now with computers assistance. Could you look at Dyce's famous painting and have any idea it is King Lear unless someone told you ahead of time its Shakespeare's King Lear? A 3-d printed sculpture of Dyce's painting wouldn't be much of an improvement over looking at the original painting, well, it might look cool but it wouldn't help comprehension of the original theater play. Modern tools and energy sources mean marble sculpture is cheaper and more available to the masses than ever, yet despite the new easy tools there are more book authors than ever...
I'll just admit defeat WRT some non-fictional topics. As a kickstarter or movement or experiment someone should make a "thingiverse for geometry" site. Nothing but endless 3-d printable models to use to physically demonstrate 2D and 3D geometry proofs. Can all of Euclid's proofs be 3-d printed it an educational format beyond the ridiculous (ridiculous being 3-d artificial clay tablets of a translation) In my infinite spare time, etc...
Personally I am not a huge fan of visual as it almost seems more complex sometimes seeing more than you need to at a time. I prefer C++ directly in the engine but for working with teams where others such as technical artists, game designers, artists etc need to modify it helps. It also helps document the architecture of something without having to dig in as much. They have a pretty good balance of direct code and/or visual blueprints in Unreal. The best part is you can always get to the metal with the code behind it, or you can choose to do either visual or direct code only, or both visual and direct code. I think visual programming that obscures the source or makes ugly source is not great.
[1] https://docs.unrealengine.com/latest/INT/Engine/Blueprints/i...