He has no experience with writing code and little general computer knowledge about stuff like OS's file systems, etc. Basically he would be starting from scratch.
What would be a good place for him to get started? I'd like to give him some resources so he can learn at his own pace, but I also don't want him to get overwhelmed and decide coding is too hard.
Thanks
The TI has always included a programming language and interpreter in their calculators. It used to be "TI Basic" but now it is full Lua. They have hundreds of example programs to look and and learn from and tutorials galore.
The thing that finally made it click for him was, he could take this little handheld machine anywhere and whenever a programming thought struck him he could try it. Soon he was building reusable functions and libraries of reusable functions and everything clicked.
Now he's transferring a lot of that knowledge to other languages, most recently Python, without any trouble at all. I would recommend it to anyone with a kid who is interested in learning.
I found C for Dummies at my uncle's house and got lucky. I loved it.
I've always wondered what alternatives there are. Most of the college textbooks I had were too dense to get into, but I think I remember the Deitel and Deitel ones were descriptive enough, but kind of dry.
Maybe I'll keep this TI NSpire CX CAS in mind next time the question comes up.
About 1.5 years ago someone posted this discussion of a related article on HN: https://news.ycombinator.com/item?id=6303654
It's probably better to pick something smaller and more achievable at first so you can make some early progress and experience some successes but picking a huge goal is fine too, you just have to break that huge goal down into smaller and smaller ones until you have a reasonably sized sub-goal to break off and work on.
Chances are that moment he makes a shape move on his computer, he'll be hooked. At least that's what happened to me.
If there's a CodeDay (https://codeday.org/) near you, bring him to it. It's a nonprofit 24 hour hackathon for high schoolers. He'll meet a bunch of other people his age who are also into programming and will build and present a project by the end of the weekend. In the past we've had participants build everything from a breakout clone to a bootable OS in pure x86 assembly, so there'll be a wide range of skill levels and he'll see his peers building incredible things. Disclaimer: I'm one of the organizers of CodeDay LA.
There's also a Facebook group filled with other high schoolers who are into programming (https://www.facebook.com/groups/PennAppsHS/). If he has a Facebook, send me a link to his profile to my email (in my profile), and I'll add him to the group.
I'm also high school-aged and, if appropriate, would be more than happy to talk with him. Feel free to reach out to me through my email (again, in my profile).
Also see http://www.paulgraham.com/pfaq.html.
Also a Virtual Machine, such as VirtualBox would help him learn how other operating systems work without breaking his own computer.
Downey's Think Python might be a good place to start (free download, but I'd recommend getting the hard copy) http://www.greenteapress.com/thinkpython/
For reviews: http://www.amazon.com/Think-Python-Allen-B-Downey/dp/1449330...
You might consider this book or related ones listed on Amazon: http://www.amazon.com/Python-Kids-Playful-Introduction-Progr...
There is this Intro iOS/Swift programming book that claims to teach non-programmers..... http://www.amazon.com/Introducing-iOS-8-Steve-Derico/dp/1491...
This book also seems very interesting and doesn't seem to require much/any programming experience:
Analyzing Baseball Data with R http://www.amazon.com/Analyzing-Baseball-Data-Chapman-Hall/d...
I do think it is very important that somebody be readily available to teach/help with some of the concepts....
You can do a lot with ancient tools like QBasic, simple graphics and so on. For more sophisticated things Python is a good tool because it has a simple syntax that is very readable and uncluttered.
Once he has made a few simple things like that run then if he has an Android device it might be worth installing Android Studio and trying to build some simple apps. There are plenty of tutorials with complete source code that can be examined.
And finally make sure that he understands that he can ask for help. The Net is full of information and people who can and are willing to help. I forget who said it: "There is no such thing as a stupid question, only stupid answers" so impress on him that when he gets genuinely stuck that he only has to ask on something like StackOverflow or many other forums.
I would suggest heading to the library (whether public or high school's) and taking out a book on Python. There are a lot of online books, but I find that having a physical book you're learning from is a worthwhile experience. There's less distraction, and watching that bookmark move from the beginning to the end of the book is very satisfying. Also, I thnk it's extremely important that you be there to guide him, and foster inquisitiveness, as that's a very key property of some of the greatest computer scientists and hackers.
I will echo Igas's suggestion also -- it would be great if he had something he wanted to build to channel this urge into. Even dinky little programs like text-based calculators feel impressive when you're starting out, and get you a feel for programming quickly.
When he wants to cut his teeth on stuff that is "real world useful" you can show him a framework like Flask (which is wonderfully minimal), and have him make a web server on localhost. That would be a perfect segue into web tech (HTML/JS/CSS). That might also be a good time to introduce a second language, like Ruby (which is similar enough to python) to show how similar languages can be to each other. I would say this sets you up to introduce the most important parts of CS: the data structure & algorithmic underpinnings. This is the stuff that sticks with you for a very long time and is always useful, no matter the language.
This might be wishful/meaningless thinking, but you could also introduce him to SICP classes by abelson and sussman. I say this for a few reasons:
1. Lisp is simple, yet powerful (they show this)
2. The realization that very little about computer science is actually "new" thought
3. Introduction to the plethora of college-level courses available for free, and getting used to being in charge of your own education (but using a more traditional medium)
When I was a lad I started with the most powerful computer I could afford - a pencil and paper.
Show him this
https://www.cs.drexel.edu/~bls96/museum/cardiac.html
See if it interesting.
Then I moved on to the next most powerful computer I could afford - a ZX81 with 1k of RAM connected to a television set!
I would type programs in from books and magazines and see if I could get them to work - so I learned to fix programs before I learned to write them.
So I still advocate this route. Not writing apps for iPhones or trying to write Xbox games and build websites.
Buy the simplest thing I can find - something like an Arduino that does things on a small scale. Learn how computers work, not how to program them.
(install MAMP or WAMP for him to get him started, then get him a domain name and hosting for his own simple website)
HTML CSS javascript jQuery PHP MySQL
I recommend Head First HTML and CSS to get started. The other books in the series are good as well all the way up to Head First PHP and MySQL.
TeamTreehouse.com is a good place to start as well or pick up with once you make it through a few of these books.
Once he gets through those I would point him to learning Rails and/or Laravel frameworks creating a few web applications.
Apps are fun too if he has an iPad and/or iPhone go through the iOS App tutorials on TeamTreehouse.
Good luck in 2015.
In that way he will learn the fundamental process of building something in small steps and endless iterations, messing with other peoples code and navigating easy in it - that one is important too.
For me, coding is a passion. A labor of love. I haven't worked a day since starting. As an iOS developer, I'd say learn Swift. Apple pushed the great reset button and we're all starting from the same place.
Once he understands this, you should encourage to hack into Minecraft hacks.
Later you can ask him about start their own projects and help him when he got stuck.
Programming should be fun and using a language only a tool for their mind, so help him become passionate about build things for himself.
Python's recommended a lot but personally I'd avoid it, it's a nice language but there isn't much to use it for without starting using frameworks.
What I'd recommend is starting with web development (that's where I begun). HTML can be taught easily and provides quick gratification, you can easily teach enough to produce results in a few hours, alongside HTML I'd teach the basics of CSS. I can personally recommend W3Schools[1] (though I believe codeacademy[2] is good as well), this can easily be personalised to make it appeal to your brother.
When he's got a decent grasp on this, Javascript or PHP links in perfectly (it could even be an extension of the HTML lesson - a larger project) so would work well to move onwards.
Another thing that I wish I'd have known about when I was learning is the amount of support available. I've since been involved in a local CoderDojo[3], if there's one where you are, I'd highly recommend going along to one with him! Even without any coding experience, I'd recommend it.
If you have any questions, feel free to ask :)
Python makes the transition from HTML to Turing Complete languages much easier since you don't need to worry about syntax. I am speaking from experience, I couldn't learn JavaScript until I learned the basics of Python.
Also, a large project is important. Working on my large TSA project has taught me a lot more than I would have learned by fiddling with smaller things.
Avoid web app tutorials that make you pass a test before continuing. Code Academy, Khan Academy, and similar things are nearly always horrible for actually learning. For example, Code Academy starts its CSS turorial with a CSS3 animation, and has 5 screens for a Python tip calculator, with cryptic instructions that make coding seem a lot harder than it actually is.
W3 schools is considered harmful by many and has at least in the past taught incorrect interpretations of standards. Please do not suggest them as a resource for new learners. It's better than it used to be, but is still unaffiliated with the W3C. MDN is a better resource.
For games, C# or Javascript are far better choices than Processing[0]. And C++ is a better choice than C, regardless of personal preference toward one or the other. Almost every game is written in C++, and libraries are designed accordingly.
Also, I would not recommend learning both server-side Python and Node. Node is not objectively better so there is no real reason to switch over just because it's "hot." Python has much more mature libraries and modules.
Large projects are not good for beginners, they cause sunk cost fallacy and probably repel a lot of people from new disciplines. Better to adopt a series of smaller, exploratory projects rather than reaching towards a momentous goal from the start. Beginners will only find themselves refactoring the same code over and over and over as they learn how to be idiomatic and efficient.
I would second the no CodeAcademy-style tutorials advice, and recommend picking up a good book in whatever language you wish to learn. Not a "For Dummies" style book, but one that is respected in the language community. O'Rielly books are often good, but usually a community will have one or more "bibles" that are the best track to follow. _why's poignant guide is a standout example.
Finally, I would urge any beginner to look beyond web development. It isn't really a good way to learn programming: 90% HTML/CSS work that doesn't involve control flow and 10% string munging. Games are better, but application development is best, and is likely to involve learning skills that will actually continue to be relevant and interesting in 5 years.
Source: I'm an autodidactic programmer who worked professionally as a software engineer while still in high school. I help teach a high school CS class.
[0] I love Processing but web and XNA framework games are way better for new learners especially.
var comments = document.querySelectorAll('.comment');
[].forEach.call(comments, function(comment){comment.style.backgroundColor = "#ffaa44"})
Instead.