I will bring a concrete case here.

I have a project involving Sketch and Arduino. Since I was they only guy willing in the group, I had to take the Sketch part. The problem is that our informatics group is part of an bigger organisation, and the organisation doesn't allow us to take the Arduinos with us at home. We are there for only 2 hours of week or so, and learning anything there is out of the question (Noise, other projects, etc). So I am stuck here without anything physical, only books. I don't even have a book at that, by the way.

The same case can be made for learning iPhone developing without running the apps, or whatnot. So how do you proceed here?

closed as off-topic by durron597, user22815, Ixrec, Kilian Foth, gnat Apr 22 '15 at 10:57

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic here. They are only meaningful to the asker and do not generate lasting value for the broader community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – Community, Ixrec, Kilian Foth, gnat
If this question can be reworded to fit the rules in the help center, please edit the question.


It's great when you can have hands-on experience allowing interactive exploration and experimentation. But it is by no means an essential part of learning a technique or technology--in computing or most other fields of human endeavor.

While you're not going to be able to master skills requiring kinesthetics (e.g. music, dance, kung fu) without doing them, programming is as much about imagining how a machine's state is arranged and how it can be guided as it is about typing commands or running code. The task needs think-time as much as touch-time, even if you have the physical gear handy and available.

There are many historical examples of students learning apart from the computer. While we've been use to having our own personal, immediately-available computers for the past 35 years, in the first half of the IT industry, machine time was very scarce and the equipment highly shared. Students programmed offline as a matter of course, then submitted their runs to the datacenter in a highly indirect fashion. This workflow continues to be common to this day with embedded devices and with new computer systems, sufficient equipment for which is simply not available for each developer to own and constantly interact with.

So your situation may not be ideal, but it's hardly intractable or unprecedented. So buckle down and learn the language by reading about it. Imagine programs you'd like to run and write them down. Then when you do get hands-on time, you'll be ready to try your ideas.

Btw, this is not just a theory. I've learned a number of languages (including Ada, Algol, APL, Fortran, Icon, Modula-2, MOT68K assembler, PL/I, Self, Smalltalk, and SNOBOL) for which I did not have a place to run code at the time. I got better later when I had more access, but the ability to run your code is manifestly not a requirement to learn at least a large swath of a programming language.

  • 1
    +1. ~30 years ago, I had to learn UCSD Pascal on an Apple IIe machine in my school, which was not affordable to me at that time. Fortunately, I got some books about that language (kids, you know, those old things made out of paper with lots of pages with printed text on it), which were really helpful. What I could not learn without access to the machine, however, was debugging. – Doc Brown Oct 25 '14 at 16:00
  • The machines and software tasks back then did not have the broad complexity of what is demanded today. While it's theoretically possible to learn C without being able to run your code, you'll be dead before you get to the skill level of someone with immediate access to the machine and several weeks. Depending on what the OP is doing with the arduino, trying to learn how to use it without the actual device can be completely impractical. – whatsisname Oct 26 '14 at 6:18
  • 1
    @whatsisname - They sent a man to the moon 45 years ago with less processing power than a modern phone. I think they could have figured-out how to build a beer app. – JeffO Oct 26 '14 at 11:27
  • @whatsisname I do sympathize. If I were in the OP's situation, I would totally want direct, constant access to the device. But my point stands. Those developing for embedded devices, new processors, etc. face this day-in and day-out. It's more challenging, but by no means impossible. – Jonathan Eunice Oct 26 '14 at 12:18
  • 1
    @whatsisname - Well they had today's tooling and over a hundred developers and couldn't get a government healthcare website built right the first time. I've programmed billing apps; it's no moonshot. – JeffO Oct 29 '14 at 10:28

It sounds like Zen philosophy but the simple answer is "Be the Computer". Let me tell you a story to explain what I mean...

When I was a kid an adult friend/mentor logged me into a mainframe computer at his college to play a text-based game called "StarTrek" using a teletype printer with roll-feed paper (CRT monitors were rare back then). I fell in love with the game and wanted to learn how it all worked but I was not even supposed to be using the computer let alone have allocated programming time and resources. Home computers did not even exist (Yes, I am OLD!).

The program was written in BASIC and had about 2,000 lines of code. My friend knew how much I wanted to learn so he printed out the entire source code listing onto a scroll of paper that was about 30 feet long. He also provided samples of input and output with several complete sessions of the game on other scrolls of paper. In the end I had a couple hundred feet of printouts.

Right after I got the listing my dad got a new job and we had to move so I lost easy access to my friend for questions (no home computers/email/etc again). The first thing I did when we got settled was go to my local library and check out the only book they had on BASIC. Using these I examined each line, analyzed what it did, and then using plain old fashioned notebook & graph paper began to execute the code line-by-line. I tracked the variables, built the strings, and used dice to generate random numbers. In modern day terminology we call this "single-stepping".

With the printouts, one book, no instructor and no live computer I learned how to program and also how computer language interpreters work. Took me about 3 weeks of focused study to master the language.

Later, I did the same thing with the entire microcode OS of the TRS-80 (Level I) written in Z80 assembler. About 4,000 lines of machine mnemonic and hex code. I was the CPU, the bus, the memory core, and the hardware interrupts. I became a Z80 microprocessor and a TRS-80 computer system and in about 4 months of on-and-off study I mastered Z80 assembly programming and learned exactly how microprocessors work. I also learned a little about motherboard design as a side effect.

Not the answer you're looking for? Browse other questions tagged or ask your own question.