7 ms·
Teaching Someone To Code Is Partly A Hardware Problem
- danso 13y agoI 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 13y agoI 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.
- chatman 13y agoI 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 13y agoI 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.
- lanbird 13y agoyou are like sheldon!:)
- npsimons 13y agohttp://www.netfort.gr.jp/~dancer/software/binfmtc.html.en http://www.netfort.gr.jp/~dancer/software/binfmtc.html.en
- bloaf 13y agoTeaching 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.
- bitserf 13y agoRegarding 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 13y agothat 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.
- kondro 13y agoThat's an interesting observation. I might pay more attention next time I see issues like this.
- georgebonnr 13y agoI think the biggest problem in learning to code is getting over the initial dev ops hurdle. ...definitely not what keyboard you're using.
- vonseel 13y agoI began learning to code in early 2012, and my experience confirms this. When I first started getting into Python heavily for work, it was so frustrating to have to set up virtualenvs, system and python paths, and runtime configurations. Another area I found tricky, as a self-taught developer, was objects and classes, and nomenclature of these things and functions between different languages. I've since done a lot of work in JavaScript, and somewhere along the way it all started to click. I'm finding it easier to read and understand parts of new languages, but there's still a big curve if the syntax differs greatly and seems unusual (I just started with Objective-C, and a year ago it was too odd to handle, but I think it's easier to pick up on now).
- walshemj 13y agoKids 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 13y agoWhy learn, when you can Google any question you have and then blindly enter whatever instructions you find?
- walshemj 13y agotrouble 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.
- gamegoblin 13y agoWhen 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.
- DanielN 13y agoThis. I often tutor beginners wanting to learn to code and environment setup is by far the biggest hurdle. Frankly, think about the last time you started learning a new language, it's usually the biggest hurdle for experienced programmers as well. The next biggest hurdle for beginners is usually grasping basic design patterns or the request response pattern of client server interaction. This is usually difficult because a lot of the nomenclature isn't there yet. But that is nothing in comparison to the struggle it is to walk someone through basic environment setup for RoR even node.
- pjungwir 13y agoI think this is a great insight. Just think of how many professional Java programmers are befuddled by classpath issues. Or Ruby programmers who can't figure out rvm. When I was first starting to learn C, it took me a while to figure out compiling vs linking, Makefiles, and why I had to -lm. BASIC was so much simpler with just load and run. A lot of people are looking for a good teaching language, but really I suspect almost all languages are fine, and syntax is less important than an environment where you can jump right in without a lot of fuss.
- 616c 13y agoI was a ling-lang major, and I fondly remember us all having the usual Windows and Mac fare. The professor told us for our Intro to Programming Course (all in C++ mind, you terrible first choice) that we needed to SSH into a Solaris box and compile with GCC (or g++ rather). Failure to compile with that, regardless of compiling with MSVC, Borland, or anything else was a 0. I am so glad he forced me/us. He spent a day explaining Makefiles and their power, mentioning some people make their living fixing those up and paying attention could potentially help you out. That summer, I finally started using Linux, for personal interest, and I was so glad that class allowed to compile my own device drivers (back when wifi cards were still a novel PITA) and understand the basics of what was happening. Good times.
- morgante 13y agoThis 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.
- rocky1138 13y agoThe smaller the screen, the more productive I am, as well. As with anything, blanket statements rarely work out.
- zacharycohn 13y agoThere'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.
- cantbecool 13y agoAlso there is a motivation factor associated with better hardware.
- morgante 13y agoRight, 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.
- bhauer 13y agoMy 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
- crazygringo 13y agoI'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 13y agoA 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 13y agoYou certainly meant a basic scientific calculator vs a TI-83 vs a HP 16c :p
- auganov 13y agoSure. But it made it a bit better. Thus it was a good idea. Most of us here are pretty passionate about computers. Not everyone is. Making it even 10% more enjoyable for someone is a big success. It might be enough to push you from almost liking something to liking it. Note: I use 3 displays (currently 2 because of moving) and I wouldn't go back.
- stinos 13y agoyet there seems to be some (semi-?)scientific evidence that screen estate does matter: http://www.corecommunication.ca/4-studies-which-show-that-using-a-second-monitor-can-boost-productivity/ http://www.corecommunication.ca/4-studies-which-show-that-us...
- pamelafox 13y agoFor 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.
- alan_cx 13y agoWhere 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.
- DesaiAshu 13y agoWe (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 13y agoThe debug cycle is just as much a product of the environment and language you are using, as it is the hardware.
- schmrz 13y agoAs 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-a-way-to-learn.html http://www.randomshouting.com/2010/12/14/Scarce-hardware-as-.... Not trying to spam my articles or anything, I just feel like it's an interesting contrast to this article.
- illyism 13y agoIt'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 13y agoI 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/image/thinkpad700c.jpg http://images.businessweek.com/ss/08/02/0215_laptop_history/...
- DennisP 13y agoI'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.
- lucian1900 13y agoI 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 13y agoNice keayboard also may help with RSI if you are unlucky to suffer from that.
- benjamincburns 13y agoSuggestion 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.
- 6d0debc071 13y agoHaving 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.
- pcunite 13y agoOne 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.
- lisimia 13y agoMy 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.
- bluedino 13y agoI 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.
- mathattack 13y agoLarge 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.
- mentos 13y ago"Where we're going we don't need monitors" http://i.imgur.com/ITc0Bmu.jpg http://i.imgur.com/ITc0Bmu.jpg
- derekp7 13y agoOne 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 13y ago6 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.