3

How do I start learning Raspberry Pi?

I know I need to learn:

  • C/C++ programming
  • Linux (Debian)
  • Electronics

What else is there? Also what books would you recommend?

  • ergh.. to learn using debian is a good option if you think about installing a debian based distro. but why c++? take a look at perl,pyhton,java or even c++. but IMHO as a beginner you should start with java or python if your scope of application/pi imply that.. – Alex Tape Jan 19 '14 at 13:26
  • 1
    Although this question is kind of the definition of "too broad" and involves a request for opinion based material, it's also concise and on topic: most of our other questions revolve exactly around the pi, programming, linux, and electronics. So I encourage people to add answers involving their particular knowledge of how to approach learning whatever subset of these things in relation to the pi. +1 – goldilocks Jan 19 '14 at 14:16
  • It really depends on what you want to do with it actually. Doing "quite" easy things like a fileserver, mediacenter or webserver etc. You would just need to know something about the kernel. Big projects like home automation needs python knowledge etc. – Loko Jan 20 '14 at 8:40
  • @Loko : Nothing could possibly need python knowledge because you don't need python to do anything. You can use python to do practically anything, but this is true of most higher level languages. – goldilocks Jan 23 '14 at 22:11
3

Do you need to learn C/C++? No, there are countless things you can do with the Pi without ever touching any C or C++ code or using a compiler. Even lots of programming in other languages which are just as valid. For example, Scratch, python, perl, java, and so on.

Do you need to learn linux/debian? No, you can run Risc or just use XBMC or other non-linux systems. Or non-Debian linux distros. Or you can use debian linux (like Raspbian) without learning the theory of how to compile your own kernel.

Do you need to learn electronics? No, you can make lots of fun projects with the Pi without electronics. Use it as a mini file server, use it as a tv-top entertainment box, use it to learn about programming, and so on.

You don't need to learn any specific topics. If you want to play with the GPIO pins and light up some leds, do that, and read up about transistors and stuff as you go. If you want to learn C++, do that, and read up what you need. If you want to know more about debian, do that, and read up when you get stuck.

This question is just like all the "what is the best programming language" questions - start instead with what you want to do. What on earth is "learning raspberry pi" or "working with raspberry pi"? Then it should be easy to figure out what you need to know to do what you want.

2

Linux

Here are three important things for linux newcomers to understand before they go anywhere:

  • Linux, proper, is technically just an operating system kernel. If you have an interest in computers and programming, you need to be aware of the difference between the kernel/kernel space and userland/user space. This distinction is applicable to all common operating systems.

  • The OS colloquially referred to as linux1 (or GNU/linux), includes a userland which completes the system as a very unix-like, mostly POSIX compliant operating system. Linux is probably the most widely used OS in this category today excluding Mac OSX (which is a fully compliant UNIX), representing 40+ years of *nix evolution. This history is a major part of what makes the OS so adaptable that it's used on a very large percentage of the world's web servers, virtually all supercomputers, common embedded microcontroller devices, and of course, the Raspberry Pi. This is also a reason that many or most computer science students now end up with some significant exposure to linux. In short, perhaps contrary to popular perception, linux is not a backwater periphery of modern computing but very close to its center.

    In relation to this and the first point, it might be worth contrasting Android, which also uses the Linux kernel but has a completely different, not so unix-like, userland.

  • The various mainstream linux distributions, such as those used on the pi (Raspbian, Arch, Pidora), are all variants of the same OS. They are fundamentally the same and built from the exact same pieces; the most significant differences involve the init and package management systems used. They also customize their graphical environments, but it is worth noting that for the most part, those environments are not particular to one distribution; for example, you can use LXDE, the default on raspbian, on any other linux distro, just as you can use KDE, GNOME, etc. on raspbian if you want.

I wrote that these 3 things are important "before you go anywhere", because, with regard to learning, they will help you to understand what materials are relevant. For example, if you are using one of the normative linux distros (raspbian/debian, pidora, arch), these are the same as they are on an x86 based desktop. Pi users represent only a small fraction of linux PC users generally, so while I am a big supporter of this site, keep in mind there is a much larger GNU/Linux community out there (and an even bigger "unix-like" user community), and you would be wise to make use of it.

The internet is of course (...naturally, even), a great resource for programming and technical material,2 and that coupled with hands on experimentation will almost certainly be the core of your learning experience. WRT to books, UNIX (or linux) system administration manuals are common (== easily found) and always worth looking at.

If you are going to make use of the pi remotely and have a spare partition on another computer, I highly recommend you install a linux on that and work from there. Cygwin is something you should know about if you prefer to stick with Windows, especially if you want to do pi related programming. You can also run linux inside another OS via a virtual machine.

Man pages are an indispensable reference. Like a lot of people I did not at all enjoy man pages at first, but the sooner you get to like them the better. They are the primary documentation (meaning, free from hearsay and misunderstanding, the "final authority") -- for basic commands and configuration files, and if you are squeamish about consulting them, you will end up wasting a lot of time. When you have questions about something, quoting something from a man page (e.g., something which has you puzzled or frustrated) is an excellent start.

WRT Linux kernel features, the official source tree includes a Documentation/ directory with a lot of useful information in it -- probably most useful via a text file search tool such as grep (and see the -R switch in the man page). This directory is also available online.

C/C++

Not everyone is a fan of lumping these languages together, but one is an evolutionary offshoot of the other, and it is worth noting that C was developed at least partially to revolutionize the portability of UNIX, and this unparalleled lineage of portability explains linux's adaptability as well. Many aspects of C's style have been a significant influence on most of the other widely used programming languages today. Linux (the kernel) is written primarily in C (with asm where required) as is pretty much all of the fundamental pieces of the GNU userland, which is why C is the "native" language of linux. While you don't need to learn C to learn C++, it certainly will broaden your understanding of it. Also, because C is so universal, higher level languages such as python, perl, and shell (which are in fact implemented in C) often "wrap" native library functions transparently, so understanding those native libraries will give you some insight there.

The ISO compliant standard C library on linux (GNU glibc) is rounded out with extensions that come, for the most part, directly from the UNIX world. The GNU C Library Manual is a good introduction to these and system programming on linux generally. Man pages, which cover the entire standard library plus GNU extensions, are again the primary documentation. GNU C is also pretty much POSIX complaint, and the offical POSIX man pages are sometimes a better read than the GNU ones used on linux systems.


1. Above I use capital L Linux when referring to the kernel and small l linux for the unix-like Linux based OS, aka. GNU/Linux. The reason for the "GNU/" is that most of the fundamental userland, including the native library, are GNU projects, and GNU as an organization is separate from Linux.

2. E.g. I think wikipedia is a near textbook quality source of concise, general CS related information (as might be deduced from my links here).

0

Best way to learn is by doing. Get your hands dirty with the device. If you are new to Raspberry Pi, a quick way would be to install NOOBS on your SD Card, it shall give you option to boot from Raspbian (Debian) as well. Python is preinstalled but you can easily install C/C++ as well. If you are able to do this yourself, you can reward yourself in getting a good beginning in learning debian.

0

I started using Pi around 6 months ago. I've created a small media center in my house. This is what I would suggest you to do ->

1) start with installing XBMC and create a small media center in your house (there's a lot of information online specific to this topic. You need a Television in your house with a HDMI input and a SD card to install XBMC.)

2) Once that is done. Learn some basic concepts of Linux and SSH and get familiar with it.

3) Try to log into the raspberry pi using any SSH client like putty. (Logging into raspberry pi from your laptop is easy, just follow some online forums for the exact procedure. But, you need to make sure the Pi and your laptop are connected to the same router. I've a Pi connected to the router of my house by a LAN cable, whereas I SSH into Pi from my laptop on the same router through WiFi)

4) Browse through the files and plugin folders, you'll observe all of that is programmed in Python.

5) Learn some basic python, and try to understand how a plugin in XBMC works by accessing it's python scripts.

6) When you see a link/plugin is broken, you can simply log into the Pi using SSH, look at it's python code and try to fix it.

With all this, you'll achieve a lot. You'll learn a little bit of-

1) Linux

2) Python

3) XBMC

Moreover, you'll have an awesome media center in your house on which you can watch HD movies and latest shows directly streaming on your TV.

I hope this helps. All the best :)

0

Although an older question, but maybe wanted to refresh new resources on the site for anyone with the same question.

https://www.raspberrypi.org/education/ is your main 1st breath of raspberry Pi literature if you want to explore it's capacity and technical reading, so is Wikipedia.

But assuming you already have an actual Pi plugged in, powered and configured ready to go in front of you, jump into https://projects.raspberrypi.org/en/projects instead for a initial gauge of what to do next. Specifically recommend doing Python training and focus on completing projects already using your Pi (https://www.raspberrypi.org/documentation/usage/python/) before you do any C++ or others since python is ready out of the box, unless you plan to focus on c++ specifically.

You can always jump out of the python learning into any other language if you feel you need a change or just prefer exploring. Once you are comfortable with a standalone software project then you can also mix in an electronics starter projects like blinky and like. https://raspberrypihq.com/making-a-led-blink-using-the-raspberry-pi-and-python/

I'm almost certain you will know exactly what you want to learn next shortly after that.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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