
Teaching Someone To Code Is Partly A Hardware Problem - gz5
https://medium.com/what-i-learned-building/fe6a2067d770
======
crazygringo
I'm sure it's _nicer_ to code on a couple of 30" monitors with 5 entire
applications at once... but it's hardly necessary.

I've used a screen no larger than 13" for probably nearly a decade now, for
all development work. Cmd+Tab (as the author mentions) is virtually as fast as
moving my eyes to a second monitor would be -- even when working on a huge
monitor, I honestly don't care, it's just not any faster at _all_ (but I
totally understand that other people find it helps).

I hate to say it, but I don't think she "needed" five entire windows open
simultaneously -- it's nice, but to say it's "needed" just sounds spoiled, and
not having multiple huge monitors is not a "hardware problem", any more than
not owning a Ferrari is a problem in learning how to drive.

~~~
hkmurakami
A better analogy might be using a basic scientific calculator vs a TI-83
calculator for your math homework. Having things like the history and the
"ans" variable available makes things far more enjoyable and stressless in
crunching those numbers and finding those angles with trig functions, even
though that scientific calculator functionally does the job totally fine.

~~~
ibizaman
You certainly meant a basic scientific calculator vs a TI-83 vs a HP 16c :p

------
bhauer
My first computer was an Atari 800 connected to a miniscule ~7" television.
Although I have worked with displays of various sizes, I presently own a total
of four 30" LCDs and two 24" LCDs spread across my two main workstations. I
invest heavily in displays at the expense of nearly everything else. I believe
very strongly that displays are the crucial piece of hardware whose stagnation
is keeping desktop computing from evolving [1].

So I pretty strongly agree with the article's thesis that learning to program
is in part gated by the availability of a high-quality desktop-grade set of
gear. (Whether it's truly a desktop computer or a laptop made to behave like
one is a detail that I don't really care about; though I've never seen a
laptop with three dual-link DVI ports.)

I agree that once you use a large display, you absolutely do not want to go
back to a small display. I contend that if I could buy a 50" high-DPI display
for my desktop that once used, all of my current 30" monitors would feel
antiquated and feeble. Suitable for the recycle bin. And I'd love that.

Moving my eyes and/or turning my head is _so_ much faster and productive than
flipping through a stack of windows using even the best window manager.

Also, I'm not sure why there's a thread here that says that some languages may
see less benefit from large displays. Java is cited by name. I do Java web
development and with Eclipse, code is compiled and hot-reloaded by the
application container as I work. Modern Java is definitely sufficiently fast-
paced to benefit dramatically from lots of screen real estate. One way to put
it is that my app has been recompiled and hot reloaded well before I can find
the browser window on a small display.

[1] [http://tiamat.tsotech.com/displays-are-the-
key](http://tiamat.tsotech.com/displays-are-the-key)

------
gamegoblin
When I was young I did all of my programming on a TI calculator (BASIC, and
z80 assembly with an on-calc assembler).

One of the biggest hurdles for me in moving to a language on a computer was
setting up a compiler, IDE, etc is tough for a 12 year old who doesn't know
the vocabulary. From my experience at university, it is tough for college
students who don't know the vocabulary and haven't done anything like it
before.

I eventually started coding in Python since it is easy to install and use IDLE
to run code.

A lot of people have the aptitude to learn to program, but this would be much
easier if you could just "Download C++" and download the compiler, a simple
IDE with a compile+run button, and have the installer do all of the PATH
wiring, etc. I have seen many people give up trying to get started just
because this process can be so finicky.

~~~
tehwalrus
for C/C++ on Windows, I recommend DevC++[1] (it also runs on linux too, but
apt-get install [ide of choice] would also work there.)

It's bundled with the Mingw compiler, and basically works as you mention out
of the box. I was delighted when I found it, a few years ago when my main
systems were windows.

[1]
[http://www.bloodshed.net/devcpp.html](http://www.bloodshed.net/devcpp.html)

~~~
EliRivers
Dev-C++, or at least the version of it you get at that particular website, is
a terrible choice. [1][2][3][4]

[1]
[http://www.cplusplus.com/forum/articles/36896/](http://www.cplusplus.com/forum/articles/36896/)

[2] [http://clicktobegin.net/programming/why-you-shouldnt-use-
dev...](http://clicktobegin.net/programming/why-you-shouldnt-use-dev-c/)

[3] [http://www.daniweb.com/software-
development/cpp/threads/3707...](http://www.daniweb.com/software-
development/cpp/threads/370755/so-whats-wrong-with-dev-c-all-of-a-sudden)

[4] [http://blog.vucica.net/2011/01/reasons-against-advising-
begi...](http://blog.vucica.net/2011/01/reasons-against-advising-beginners-to-
use-dev-c-in-2011.html)

~~~
tehwalrus
Thank you, as I mentioned I haven't used it for a few years, and it seems it
was old and broken even then! Apologies.

~~~
EliRivers
The Orwell fork n' continuation has a much better press.

------
bitserf
Regarding typing, I don't know if this is an actual phenomenon, but I've
noticed that some programmers I've worked with who had problems touch typing
seem to have had more attachment to the code they've written, than those for
whom typing is a fraction of the effort.

~~~
hkmurakami
that seems logical to me. If it's going to take you 2 hours vs 30 minutes to
rewrite/refactor your code, that extra physical/time burden will dissuade
someone from saying goodbye to the code they just wrote.

------
chatman
I think this is a very specific example of trying to learn HTML/CSS and
copying a website. For someone trying to learn Python or C or Java might not
require such a huge monitor.

Also, for compiled languages, coding may not be a reactive process.

~~~
MaxGabriel
I agree. Working on iOS – which is written in a typed language, then compiled
and deployed to a simulator that automatically takes the frontmost window
position – I've never had a problem working on just a laptop. But now that I'm
foraying more into CSS, a second monitor might be nice.

------
lucian1900
I disagree that this is a serious problem. Nice keyboard and big screens help,
but are not a requirement.

I do believe that hardware is becoming a problem, though. iOS devices are
permanently crippled, Android and ChromeOS are crippled by default and Windows
is heading that way as well. This is the real danger to learning.

~~~
walshemj
Nice keayboard also may help with RSI if you are unlucky to suffer from that.

------
morgante
This really doesn't seem accurate. I'm a professional developer who codes, and
learned to code, using just a 13-inch laptop. Clearly large screens and fancy
keyboards aren't always necessary. If anything, they impair actually learning.

~~~
zacharycohn
There's an important difference between a professional and a complete novice.
The complete notice often needs additional tools and a lot more information on
hand that the professional would have stored in memory or would be able to
deduce contextually.

~~~
morgante
Right, but those are definitely the easier things to learn. It should
certainly be simpler to memorize a couple keyboard shortcuts than to learn how
to program... so just start with that simple task and the "hardware issue" is
overcome.

------
georgebonnr
I think the biggest problem in learning to code is getting over the initial
dev ops hurdle. ...definitely not what keyboard you're using.

~~~
walshemj
Kids today when I started work I had an hours instruction on how to boot the
PDP/11 (copy files used the editor) then was told get the book we have on
FORTRAN and teach yourself.

Its probably a sign of how shallow a lot of peoples knowledge is these days -
I had one developer who did not know how to use a cli to work with MySQL to
get round the limitations of phpMyAdmin

~~~
bluedino
Why learn, when you can Google any question you have and then blindly enter
whatever instructions you find?

~~~
walshemj
trouble is you will get a lot of hits on the easy stuff plagiarized from basic
tutorials.

How to do 2+2 in language x yes

How to do do anything slightly complex you might have to spend a while
digging.

------
lisimia
My recommendation have at least 1 monitor in vertical as a
reading/script/working buffer monitor. the vertical space really helps in
reading really fast, i display 125~ lines of code all at once and if my
functions are grouped right, i can see the exact flow right there on the
screen. it is NOT faster to switch windows, your brain/eyes loses track of
where within the document it was last. (try reading two books switching in the
middle of paragraphs)

Another big reason I like having screen space is that I can display my
required specification/ design doc/ uml/ ms paint, whatever it may be while
coding.

------
mathattack
Large monitors are a huge productivity benefit. As are multiple monitors.
That's why they're considered a status symbol at many places.

It used to be you could tell bad places to work by the power of the chips on
the machines they would give employees. Now it's monitor size that's more
important.

Tying back to the original story, I think this is highly underrated in
learning. And also to their point why it's hard to learn in a coffeeshop.

------
derekp7
One thing that bothers me is the keyboard recommendation. In most modern split
keyboards, it seems they put the number 6 key on the left side of the split.
Now the way I was taught touch typing (and what feels most natural) is to hit
the numbers 1-5 with the left hand, and 6-0 with the right. So why do they put
the "6" key on the left side of the split?

~~~
T-hawk
6 on the left is more symmetrical. There's 7 keys on the left side of the top
row: ~0123456. There's also 7 keys on the right: 7890-= and backspace.

Also, the standard staggered layout is not quite symmetrical. 6 is slightly to
the left of the midline between the two index finger home keys of F and J,
closer to the left hand.

If you're an accountant touch-typing lots of numbers, breaking it to 12345 and
67890 would make sense. But for anything that involves more of the keyboard,
certainly including programming with frequent use of the - and = keys in the
top row, breaking 123456 and 7890-= makes more sense.

------
pamelafox
For our GDI HTML/CSS workshops ([http://www.teaching-
materials.org/](http://www.teaching-materials.org/)), I often recommend
JSBin.com, because of the live feedback. Once we get to JavaScript and multi-
file projects, I usually recommend Sublime Text/Chrome and just make sure to
constantly remind them of the workflow and appropriate keyboard shortcuts
(ctrl+s, alt+tab, ctrl-shift-r).

That's one of the surprising things about teaching web programming - a lot of
it is stuff most of us don't think about, like using a file system and
remembering keyboard shortcuts. Often times, that's the first hump for
students to get over (like for the HTML first exercise), and once they're over
that hump, they're good to go for a while.

------
schmrz
As others have pointed out this is far from being accurate. You most
definitely don't need awesome hardware to learn how to code. In fact I wasn't
sure if that quote about quitting over bigger monitors is serious or not but
after following the linked article it seems to be.

I also wrote an article about how bad hardware actually made me a better
programmer: [http://www.randomshouting.com/2010/12/14/Scarce-hardware-
as-...](http://www.randomshouting.com/2010/12/14/Scarce-hardware-as-a-way-to-
learn.html). Not trying to spam my articles or anything, I just feel like it's
an interesting contrast to this article.

~~~
illyism
It's almost as if everyone has their own methods of learning and their own
opinions.

I have two 27 inchers and one 24 inch monitor. And recently I've discovered
that I'm more productive on a 15 inch XP laptop gone ubuntu from 2003 than on
my high-end PC at home.

Workspaces are almost as fast as looking at another screen and I'm able to
concentrate more at the task at hand.

~~~
ANTSANTS
I don't mind the tiny screens of laptops so much, it's their keyboards
murdering my wrists that do me in. I can type on a generic PS/2 keyboard for
hours and hours, but I literally cannot use my Thinkpad for more than 10
minutes without cursing the gulf of space between the edge of the device and
where the keys are situated. The worst part is that I have the touch pad
disabled in the BIOS, so the placement of the keys at the back of the device
is not only painful but also completely pointless for me.

I otherwise love the hardware, but I would readily chuck it for something with
a "cellphone-class" CPU, if it looked like this:

[http://images.businessweek.com/ss/08/02/0215_laptop_history/...](http://images.businessweek.com/ss/08/02/0215_laptop_history/image/thinkpad700c.jpg)

~~~
DennisP
I've been thinking that an ideal mobile device for serious coding would be a
Dell XPS 18 plus a mechanical keyboard.
[http://www.dell.com/us/p/xps-18-1810/pd](http://www.dell.com/us/p/xps-18-1810/pd)

It's not handy for putting on your lap, but for coffeeshop use it'd be great.
18" screen, weighs five pounds, no laptop keyboard getting in the way. Making
it play well with Linux seems to be a bit of a challenge, from the forum posts
I've seen, and an upgrade to Haswell would be nice.

------
alan_cx
Where there is space available, people will spread in to it. Once they get
used to it, they are reluctant to give it up and will formulate any excuse
under the sun to keep it that way. Screens, houses, land... same thing.

------
6d0debc071
Having something like REPL available makes, IME, learning a new language much
easier - and this is a sort of hodge-podge way to get something similar for
HTML/CSS, so I can see why it might be an advantage.

Less so for when you're at a stage where you can do large projects - because
you're not redoing things as often, but when it's just short snippets where
you want to drill multiple variations to try out ideas and to get the stuff
wired into your head, it seems to be advantageous to have that sort of
dialogue with the computer.

------
benjamincburns
Suggestion for the "monitor" problem - code in a quake-style terminal such as
yakuake or iTerm2's hotkey window. Vim and sublime work excellently here. Add
a hair of transparency so that you can read your reference material "through"
the console screen. And of course, tmux.

Between that and getting browser hotkeys into muscle memory, I managed to
shrink my development/debug environment down from 2 19" monitors to a single
13" laptop screen. And when it's been necessary, I can happily go smaller.

------
danso
I applaud the OP's intentions and I think more attention overall needs to be
paid to the "oil/grease" that makes it possible to learn concepts. It's not
just intellectual effort and spirit that powers learning, but the attention
paid toward lowering every source of friction.

To use a higher-level example, I found learning and adopting new JavaScript
frameworks was _hugely_ more enjoyable and easier thanks to build systems that
set up continuous testing/automatic-reloading right out of the box (yeoman.io,
for instance). Sure, running the bash command to compile CofffeeScript and run
the tests takes just a second to type and execute...and hitting Cmd-R to
reload a webpage after editing the files even less, but those seconds build
up, to the point where development because more of a burden than it should
feel like. And, well, if I stop programming because I'm tired, I'm not
learning.

So I could see how inadequate hardware would be a major impediment to learning
to code. The frequency that novices fail to close parentheses and quotation
marks (and the inexplicable errors that leads to) is bad enough on a good
keyboard...I can only imagine how frustrating it'd be if your Shift key worked
only half the time you expected it to.

That said, I disagree with the author's specific examples. His rationale for a
bigger monitor, especially. If a novice is using five programs (2 chrome
windows, Sublime Text 2, Evernote, and Github(???)) to do simple HTML/CSS
tracing...then I would argue that she is trying to do too much and that more
of the concepts should be taught in an orthogonal way.

The OP defends his student's habits, saying that instead of learning to do
Cmd-Tab to switch, she should work off a 30-inch monitor. I think that's the
wrong way to approach the situation, even if you ignore the monetary realities
of buying a bigger monitor. Novices not only don't know the concepts, they
also don't know how to _learn_ the concepts. The pattern that the student has
apparently adopted does not seem like a best practices one.

A tangent discussion could be started on how one might structure the HTML/CSS
lessons so that the student doesn't have to have 5 windows open at once...but
I'll stop at arguing that the OP presents a sort of false dilemma here. It's
not that either the hardware improves, or the student's education will be
harmed. There's also the ability to restructure the concepts so that they can
be handled one at a time, and the discretion to push the student towards more
efficient habits.

To use one more example: in typing class, our teachers made us cover our hands
with paper...it wasn't comfortable nor what we would do naturally, but this
helped enforce the concept that typing is ultimately done fastest when not
looking at the keys.

~~~
TheZenPsycho
I disagree with your point about the monitor. Of utmost importance in learning
and usability is the concept of "visibility", that is, the ability to see at
all times the state of a system. An experienced programmer can cope with less
visibility since a lot of that system state is in their head. For a novice,
with no experience to draw on, they are essentially working blind, having no
idea what their changes are likely to do until they see the results.

At the very least you need to have both the editor and the browser open.
Switching between these two to see changes is more friction than necessary.
The additional windows are: 1. to see the lesson 2. to see the website she is
copying off 3. I forget. but it doesn't matter anyway. The task of switching
between all these windows is enough to shatter the mental context of the
_real_ task, which is building the website, making a particular modification.

That's the other thing- the workflow aspects haven't necessarily been
offloaded into the novice's unconscious mind yet. Switching between a window
needs conscious attention that breaks the coding context, and the coding
context must be reestablished again and again, on every change.

None of these realities go away because of your opinions about how a "real"
programmer should be working.

------
DesaiAshu
We (MakeGamesWithUs) have also found this to be the case. During our 75-person
summer internship, many of the developers had old and slow hardware, and it
made the debug cycle significantly slower and far more frustrating. I remember
how much more productive I became when I upgraded to pro level hardware and
can imagine the potential if they had the luxury of working on top of the line
machines.

~~~
eliasmacpherson
The debug cycle is just as much a product of the environment and language you
are using, as it is the hardware.

------
bluedino
I don't get the benefit of anything over something like a single 23" monitor
running at 1920x1080. I've spent time on co-workers 27" iMacs. There's just
too big of a screen to use effectively.

Sure, you an have 2 browser windows size by side along with a code window and
a log window and a documentation window. But, you can only effectively look at
about 45% of the screen at one time. The rest of the time you look like a
chicken bobbing your head around.

It is so much faster to hit a keyboard shortcut to go to another
window/application or switch to another desktop. The bonus of it is you don't
need to move your head since you can see the whole screen. Every computer
user, especially anyone technical enough to be a developer or designer, is
going to know alt-tab, so there's nothing to _learn_.

A resolution like 1366x758 is simply not enough to do work on. Sure, plenty of
us use it on our MacBook Airs but we also breathe a huge sign of relief when
we plug into an external monitor at our desks, and stretch our figurative legs
on the 1440x900 screen of a 13" Air.

At bare minimum, enough screen real estate is needed to see your browser
window alongside a web inspector. Using a resolution of 1366x768 causes you to
shrink the fonts or spend half your time scrolling.

------
bloaf
Teaching someone any computer skill is partly a hardware problem. A large
monitor and typing skills improve your abilities to perform most computer
tasks more complicated than checking facebook.

------
pcunite
One of the best things I did for myself was buying a 24" display, super nice
Filco keyboard, and a good mouse. Pair all this with a table that is
adjustable and a nice chair.

------
mentos
"Where we're going we don't need monitors"

[http://i.imgur.com/ITc0Bmu.jpg](http://i.imgur.com/ITc0Bmu.jpg)

