Best Beginner Programming Books?



  • [Serious request]

    So, I am sponsoring a young lady to start her programming career. I need to send her materials to get started.
    Problem, it has been a LOOOOOOOOONG time since I was a beginner, I dunno what is good any more. o_O

    Can I get some recommendations on books appropriate to send to a Middle School aged girl who wants to start programming? I figured I would send her some books on basics of programming logic, a C# beginner book, a Java beginner book, and a couple of advanced books she can use once she is up and running.

    I have been looking at the beginner books on Amazon, and they all basically look the same to me. Anyone have any experience with them, or with teaching from them?

    Help me obi-forum, you're my only hope.


  • SockDev

    hoom.... well that's a tough one....

    does she have any particular demonstrated interests? is she more into the code or the GUI? that sort of thing?

    if she's more into the code than the UI i'd recommend picking up a project for the Raspberry Pi or the Arduino. With a little help with the soldering i find they make excellent beginnings as they not only are fairly simple programming examples but they're easy to see and interact with the results. that will help spark and keep the interest!

    If the interest is more in the UI then something web based might be a better starter.

    Of course you can't go wrong with a good C# or Java background. too.

    I'll poke around tonight and see if i can find some recommendations in those areas to share.

    poke me again tomorrow id i forget. 😉



  • She just started up with Girls Who Code at her school, and I was matched with her to sponsor her going forward. I don't know what the Girls Who Code curriculum is in the schools, but I would assume it is basic Programming 101, probably in Object Oriented languages.

    I will be sending her web resources as well. But kids, and schools, like books 😉

    Sure, I will remind you tomorrow if I haven't heard from you. Thank you 😃



  • Why's Poignant Guide to Ruby.

    Pros: free, funny, littered with cartoons

    Cons: it's about Ruby specifically



  • Thank you 😄

    I am on the fence about sending her scripting stuff. Scripting stuff is, in a lot of ways, easier, but one generally needs SOMEWHERE to put the code to run it, don't they? Although, I hear there are IDEs for like Python and PHP now that provide an experience similar to Visual Studio and Eclipse with a debugger and the ability to run it without having a host somewhere to load the code to?

    What do you think?



  • Programming IMHO when learning should have a very basic editor, not an IDE.

    One must learn perfect syntax before anything else.



  • This is a standard recommendation, but also a bit controversial. Zed Shaw seems to have equal parts detractors and supporters.

    Other than that, I have experience with one tech savy noob who was able to transition into a frontend programming job. They did it by:

    1. Playing around on https://www.codecademy.com, and completing a few of their courses (a brain dead chimp can do it)

    2. Reading this book about half way in: http://eloquentjavascript.net/ They got stuck on functional programming. This is now the second edition, so it looks a bit different than it did before. Not sure if it still has that difficulty cliff it had before.

    3. Doing some free work on throwaway internal websites for a company.

    They got a junior frontend job offer soon after.

    Note that this is a fast track towards switching careers late in life and getting a job. Since your girl is still a student, she'd probably benefit from a more comprehensive study. I'm just saying this method worked in at least one case that I know of.



  • I would agree with that in theory, but on the other hand, being able to run one's code, and see it run, without having to muck around with deploying it somewhere, I think, would be very helpful for a youngling. Right?



  • Good resources, thank you 😄



  • Python code can be run locally the last time I checked?

    It has a REPL environment built in.



  • From the editor? Or would she need to know how to switch to a CLI prompt? Not that she couldn't get there eventually, I just want to try to ease her into the special little nightmare we all revel in 😄



  • Depends what editor.

    I tend to alt-tab from sublime to a xterm / cmd window.

    I learn't how to program with BBC BASIC so typing commands were normal.

    It isn't hard to teach there is a "real thing behind the clicks"

    BIG EDIT:

    I don't even thinl there is a big thing when teaching people to just move around the file system.



  • All I know is, when I have done guest speaking at schools (Middle and High), the kids all REALLY liked to be able to press "play" and see it run. It was already in a format that they understood. "play-to-run" is easy to get kids to understand.

    Having to walk them through switching out of the editor to another window to get it to run (after compiling it or otherwise making it ready to run) is, I think, more steps than are good for an absolute beginner.

    I am sure she can get there, I just don't know if I want to lead her there right off the bat o_O



  • @Vaire said:

    All I know is, when I have done guest speaking at schools (Middle and High), the kids all REALLY liked to be able to press "play" and see it run. It was already in a format that they understood. "play-to-run" is easy to get kids to understand.

    Maybe an IDE.

    But you have to remember that in an IDE things like references/imports/"whatever you like to call them"

    However python in the UK is supposed to be on the curriculum.

    This seems to be popular, but I recommend giving the student a default project to build from.



  • Oh, for sure, you are not wrong. IDEs can be very complex and intimidating.
    I never explain a single part of them, though, except where to write their "my first program" code, and where the "play" button is. That reduces the IDE (to them) to a fancy editor that can run their code 😃

    I will take a closer look at Python, though. Of all of the scripting languages, it is the one I would be most willing to recommend to a beginner. I would never in a million years recommend PHP or Perl or JavaScript to a beginner. Ruby ... maybe. Python, yeah all right. It is simple and elegant enough, and has enough community support, and has far fewer neckbearded hipsters than Ruby has 😉



  • I am from a Java / C# background and I really like python.

    Whether that makes it a good beginner language I am not sure.

    Honestly I think it is (python) one of those languages that is can be simple or as complex as you like.

    I learnt with XBAS BASIC (TANTUNG EINSTEIN) and BBC BASIC and some pascal, when I was 8-10 years old

    However I think Python is simpler in the right way, the logic is right and the syntax for the most part is straight-forward.




  • Discourse touched me in a no-no place

    @Bort said:

    Screw OOP.

    It's natural to think that Haskell couldn't possibly be suitable for beginners, but here's something from my quotes file which may indicate the contrary:

    Ferdirand: I was TA for a C++ programming course aimed at 1st year physics once. Some girl asked for help "i wrote pseudo-code but I cannot translate it to C++". Her pseudo-code was valid haskell. I cried.



  • No. Just ... no. =_=





  • You could definitely consider the O'Reily books. Head First C# in particular is pretty great.



  • Programming should have a good interface, like everything else you do with the computer. You put the code in one box, press a button, and the result appears in the other (and a simplified debugger would be great too), with no magical incantations on a strange black window.

    There's no more reason to "teach there is a real thing behind the clicks" here than there is when doing any other task. Imagine trying to teach someone the basic concepts of editing documents, and instead of Word or Writer you open Notepad and a LaTeX compiler on the other window.

    Python has IDLE, which fits that specification pretty well, despite being a generally shitty editor with a Windows 3.1 look and weird keyboard shortcuts.



  • ITYM
    @Bort said:

    Screw OOPimperative programming.



  • @Magus said:

    Head First C# in particular is pretty great.

    I can vouch for the Head First books, I've used the Java one and found it pretty helpful.



  • I knew about the Head First books, I already ordered her the ones for C# and Java 😃



  • That's quite a lot of book. Like. The latest edition of HFC# is over three inches thick by itself!



  • I am sending her her own library. So far the book count is at 11, and it is rising. 😃



  • How about messing with Unity engine? It doesn't look too hard, it gives you immediate and interesting results, and it uses a real programming language.

    Also, forces to learn basic math (and most likely physics).



  • @Vaire said:

    C# beginner book, a Java beginner book

    Don't get both. Pick one. They're too similar for a beginner to be able to keep straight.



  • She's actually in a programming class in her school under the Girls Who Code curriculum. I don't know what they are teaching them, though, so I figured I would send her both, and she could just use whichever applies to what she is doing. Don't worry, I will explain to her how to use the resources I am sending her, I don't want her getting bogged down trying to do everything. 😉



  • Unity engine? For a middle schooler? I mean ... I am sure she is smart enough to do that, but ... baby steps, all right? o_O



  • I wouldn't give someone a book on two languages with similar syntax and completely different standard libraries, that's all. I started with VB6 in a "College for Kids" class and then did some PHP development before realizing that those two languages are TRWTF.



  • I don't want to poison her against one language versus another. We in the industry have our holy wars, but for a beginner, all of the languages and tools can be frightening and overwhelming. I am sure she will work the most in whatever they are teaching her in school, and then she can dabble in the other stuff and see if any of it speaks to her 😃


  • Grade A Premium Asshole

    @ben_lubar said:

    Don't get both. Pick one. They're too similar for a beginner to be able to keep straight.

    You just made @blakeyrat cry. I hope you are happy with yourself.



  • The first programming book I ever used was K&R when I was 10. I hated it.

    The first one that clicked was Schwarz's "Learning Perl."

    Why's Guide to Ruby is good. But it's for Ruby, a slow scripting language. She might as well learn SmallTalk instead, which is a nicer and faster language, but with far fewer applications.

    "Learn You a Haskell for Great Good" is written in a similar style to Why's Guide to Ruby. I like the language, and learning it is worthwhile, but it doesn't have a killer app. Learning Haskell could make the kiddo opinionated about languages and how stupid ______ is. Teach it after she's learned a few things, but teach it early so she learns about algorithms and architecture and the relation between logic and programming and math. (Monads are interpretation functors! Monads implement the command pattern, without all of the yucky OO cruft! etc)


  • SockDev

    @Captain said:

    Learning Haskell could make the kiddo opinionated about languages and how stupid ______ is.

    TIL learning Haskell means you become a language elitist, enough so you greatly reduce your flexibility as a developer, ultimately closing out plenty of lucrative opportunities as a result



  • You learned that today?

    Anyway, I make 3 times what you do. So there.



  • @Captain said:

    Why's Guide to Ruby is good. But it's for Ruby, a slow scripting language.

    Why does that matter for this purpose? Hell I learned on Commodore 64 BASIC and HyperTalk. I made some pretty badass things before I moved on to C.

    The bigger risk, IMO, is that the student gets into the whole Rails philosophy, which is awful and sucks. If they start building Rails apps as a beginner, you've lost them forever.



  • @anonymous234 said:

    ITYM

    Naw. As Simon Peyton-Jones says: "Haskell is the world's finest imperative language".



  • You probably saw this coming once you noticed who the poster was, right?

    Meh, at least I didn't recommend SICP (which is actually a great book for beginners, assuming they already have doctorates in English, Mathematics, Engineering, and History, but no experience with computers).



  • @accalia said:

    code or the GUI

    🔪



  • @Vaire said:

    Unity engine? For a middle schooler? I mean ... I am sure she is smart enough to do that, but ... baby steps, all right? o_O

    You sound like one of those guys who think "beginners should start learning C++ at the beginning; let's teach those kids about raw pointers and dynamically allocated arrays".

    Unity, despite its size and capabilities, isn't very hard to start with. Learning C# with Unity is definitely not harder than learning C# at all.

    And if it fails... well, it's free, so you lose nothing, right?



  • @Gaska said:

    You sound like one of those guys who think "beginners should start learning C++ at the beginning; let's teach those kids about raw pointers and dynamically allocated arrays".

    Unity, despite its size and capabilities, isn't very hard to start with. Learning C# with Unity is definitely not harder than learning C# at all.

    And if it fails... well, it's free, so you lose nothing, right?

    If you want to interest someone in programming, then you need something like this:

    Once they are hooked and start hitting the limitations of game makers, THEN you hit them with K&R and pointers.



  • Well, yes, that's almost exactly what I said - the only difference being that Unity almost forces you to learn programming, unlike all those clicky editors where you can do most things just clicking around (by design, but still). Also, Unity uses C# - something that is almost guaranteed to be useful when (if) she becomes a programmer for real.



  • @Gaska said:

    Well, yes, that's almost exactly what I said - the only difference being that Unity almost forces you to learn programming, unlike all those clicky editors where you can do most things just clicking around (by design, but still). Also, Unity uses C# - something that is almost guaranteed to be useful when (if) she becomes a programmer for real.

    Can a child just casually click around and make something fun happen in Unity?

    Because it can in Click & Play and similar products.



  • @cartman82 said:

    Can a child just casually click around and make something fun happen in Unity?

    Technically, yes. The asset store has tons of ready-made scripts that require no configuration.

    Actually, no. If you want those random scripts to work together, you just have to write code yourself. But that's the point! We want to teach that kid programming after all.

    Also, if she can do C# on its own, she can do C# with Unity as well.


  • Discourse touched me in a no-no place

    The most important thing is that she starts out with some language with a REPL so that she gets the immediate feedback that the computer does what she tells it to, since from that she can also learn that it does just what she tells it to and so she'd better figure out what she actually wants to tell it to do. That's the single biggest lesson of the lot, and a REPL is much better for learning it than a language with a separate edit/compile/link/deploy cycle. (That stuff can come later.)

    Which of the many languages with REPL she uses is a bit less important. Her course might already have picked this.

    The other important thing is that she doesn't try to just learn everything from reading. Programming is a practical pursuit; putting the techniques that you learn to use is essential when it comes to converting stuff into a useful skill. If she reads something interesting, she should try it out for herself.



  • Call me old school, but I would recommend the K & R C Programming book(2nd edition), it's one of the holy bible of programming. If you master that, nothing is outside your realm.



  • @Gaska said:

    Technically, yes. The asset store has tons of ready-made scripts that require no configuration.

    Actually, no. If you want those random scripts to work together, you just have to write code yourself. But that's the point! We want to teach that kid programming after all.

    If you say so.

    I did start with messing around in the game makers of my time. And that experience DID teach me a lot about programming, even though you don't actually write any code in those things. Just saying.



  • Everything you do on a computer will teach you about programming a little bit. It's just that some things teach faster than others. Programming teaches you programming about 50x faster than not-programming, and not-programming has upper limit of what it can teach you about programming, that's all. That's why I recommend starting learning programming by programming. Because 12(?) years is the age where you can learn just about anything you need to be a programmer (except maybe for proper code design, but she'll be old enough when she comes to it anyway).

    If it was about a primary schooler, I would be all for Click&Play, RPG Maker or whatever's trendy nowadays.


Log in to reply
 

Looks like your connection to What the Daily WTF? was lost, please wait while we try to reconnect.