Summary books like this are great as long as you know you're not an expert by the time you finish them. The goal is to let you know what you don't know, and to help you recognize a problem that would be easily solved by one of these languages (which would then spur deeper learning of the language).
Reminds me of one of my favorite books ever, Gershenfeld's "The Nature of Mathematical Modeling".
Seems like an interesting concept. I just hope that the author does not treat each of the seven languages as its own entity. That is, I want a comparative description over the different languages.
I think the implied criticism is valid. This book is the "Reader's Digest" version of learning seven languages and four programming paradigms. You won't learn a new programming paradigm in a week.
You won't learn a new programming paradigm in a week.
If Donald Rumsfeld were here he would say to you:
There are known knowns. These are things we know that we know. There are known unknowns. That is to say, there are things that we know we don't know. But there are also unknown unknowns. There are things we don't know we don't know.
The point of this book, obviously, is to turn people's unknown unknowns into known unknowns. Not for them to become competent programmers of 7 languages in 7 weeks.
But you may learn what's out there. Not all learning has to be in-depth learning. Getting an overview of a field is important too. Reading Hacker News won't teach you anything in-depth either but you choose to do it for the same reason.
I had a class on programming languages in college. It was one semester and went into very little depth of each language and paradigm covered. That said, I didn't know that half of the stuff that we were taught about existed before that class, and it spurred me to learn more and to learn at a greater depth.
I doubt that there's going to be any illusion about what this book is. Surveys are vital for new learners to help them build the cognitive maps of the knowledge space they need to be able to understand what they don't know. Maybe you don't talk to a lot of working programmers, but there are a frighteningly large number of people who just don't know anything about programming language syntax and paradigms not descended from Algol-68
Agreed, but there is a reason why every masters program out there has a survey course were students each spend a class teaching a topic to other students.
There is a lot of value in knowing what is going on in your field.
I had the same initial reaction to the idea; however on second thoughts it actually sounds like an interesting book for someone like me that is stuck with a PHP, Python, C/C++ background.
It would be nice to touch briefly on 7 other, very different, languages (especially Scala and Ruby) and see what they taste like.
So, yeh; I reckon this would be a good book for an already proficient programmer to pick up the beginnings of a few new languages.
If you are interested in surveys of paradigms and older languages (1998), there is the 4 volume "Handbook of Programming Languages" edited by Peter Salus - they are cheap used from Amazon.
Volume One Object-Oriented Programming Languages : Smalltalk, C++, Eiffel, Ada 95, Modula-3, Java
Volume Two Imperative Programming Languages : Fortran, C, Pascal, Icon
Volume Three Little Tools and Languages : EQN, Domain Specific Languages, awk, sed, SQL, Tcl and Tk, Perl, Python, Music languages
Volume Four Functional and Logic Programming Languages : Lisp, Scheme, Guile, Prolog
There's also CTM (_Concepts, Techniques, and Models of Computer Programming_, http://www.info.ucl.ac.be/~pvr/book.html) by Van Roy and Haridi. It focuses on programming paradigms rather than languages, but covers several along the way.
Although title makes me skeptical (why 7 languages? why 7 weeks?), this sounds interesting since I don't know those languages. I hope it does more then repackage what I could otherwise easily find.
But there's a high correlation between companies which trust their programmers to use the right tool for the job and companies which "get it" (it being how to develop and maintain technology).
Will that eliminate 99/100 companies? Probably not that many but it will eliminate a lot, and you should be glad.
After my first job, I learned to always ask what a company is doing for source and configuration control. If they have no answer or a bad one (Visual Source Safe), that will tell you a lot about the environment.
Same thing if it's an MS shop that refuses F# or a java shop which refuses Clojure a priori.
"Getting it" may be right for us (developers) but wrong for the company.
A florist that needs order tracking isn't trying to change the software world. That persuasive guy thats insists SmallTalk is gods gift to florists is NOT doing them a favor.
Perhaps not, but writing it in Java isn't exactly doing them a favor either as it increases time and cost for development and changes. The Right Thing for such a situation is probably a compromise between language power and popularity. Ruby or Python with one of the popular frameworks that makes half the decisions for you would probably be a good choice.
Estimates have it that there are about 50k people being paid to write Ruby on Rails right now, chances are that it's way higher because it starts to be the language of choice in outsource India because of the high conceptional similarity between different projects written in rails and how they help new teams get started with an existing code base.
I sure as heck can't find enough people to hire for ruby ( and even objective-j !!) jobs.
I'm not saying your figure is wrong but I think that if you actively look for a job in these languages then it's pretty simple to find one.
i don't understand why people think it's impossible to grok languages on first glance. even if that were the case, having more languages under your belt (especially non-similar languages) makes the next languages you learn that much easier
I remember (way) back when going from C to C++. It took 8 weeks of sweat, deleting code (Bad Joe! Not OO!) and rethinking it, before my brain switched enough synapses and I was in the groove. And 10,000 hours of object-oriented design practice to be able to say constructive things about others' designs.
Question - I've got more of a business background than a technical background. I can do basic html and I've played around in Linux a tiny little bit, but that's pretty much it.
Anyone have any recommendations for getting more familiar with programming in a fun, laid back way? Nothing specific I want to do with it, just think it'd be a neat thing to spend some hours in. All recommendations appreciated greatly.
People ask me this question a lot and really, the best way to learn how to program in any language is to figure out something you want your computer or the web to do and make it do it.
You have to want something. Hackers want to solve problems. They'll invent problems just to have a problem to solve. So you are going to have to do that too. Invent a problem you want to solve.
What kinds of things do you do with computers? What do you wish was easier? What do you think is fun? Build an iPhone app. Build a website to help you track your time or productivity. Build something you will use and love for a long time.
what kind of business do you run? Do you have employees? What questions do you spend a lot of time answering because information is all over the place?
The most fun and laid back way is to do it when no one expect anything from you and you are doing it to make your life better.
I would recommend R (http://www.r-project.org) since you mentioned your business background. R's strength is in statistics and might prove useful. As for a learning resource, Quick-R (http://www.statmethods.net) was an excellent guide for me.
I feel bad saying this, but also try learning Visual Basic for Applications with Excel.
I feel bad saying this, but also try learning Visual Basic for Applications with Excel.
This is actually a great suggestion for anyone who works with Excel a lot. Knowing VBA (VB for Apps) can save you (or your assistant) hours of repetitive work. Here's a good way to learn:
1. Notice some annoying task that you do regularly in Excel (e.g., importing a data file, preforming a calculation on a data set, or laying out data in a visually pleasing way).
2. Find the Record Macro command, then do the task again.
3. Excel automatically creates source code for the macro. You can open up VBA from some Excel menu; that will show you the code.
4. Edit the code to do what you really want. Often the generated code isn't perfect, or there are other features that you'd like.
I will warn you though - VBA is kind of a horrible, poorly documented language. It's not unusable, though - you just don't want to use it for large projects.
I don't think that's true. I learned how to program in high school and we had a network and it was fun to write computer programs to allow my classmates to send messages over the network to other students. This was back in the Novell messaging days. I also did a lot of graphics programming drawing neat images and a chess game.
It's no more frustrating than losing at poker or some type of competitive game or politics.
Yes, it is fun. But see, if you want to dig deep, then you are eventually going to hit topics and discussions that you can't easily warp your mind around. Learning computer science is not always an easy and happy road.
In context, lionhearted doesn't want to 'dig deep'. Rather, he 'just thinks it'd be a neat thing to spend some hours in.' He doesn't have to learn hard topics if he doesn't want to. Plus, if he does, then it should/would be for his own enjoyment.
You might also want to look at processing and try to develop some fun visualizations or animations of business data you care about. That might give you the incentive to actually dive into programming and processing is designed to give non-programmers quick sucesses. And if you grow out of the training wheels, it doesn't tie you down since you can easily move to full java using processing as a library.
If you want to start on the hip bleeding edge, there is also a project to make processing usable with scala, search for SPDE.
And there is processing.js if you want to include you animations in a web site.
The biggest barrier for beginners is usually getting an environment working that is transparent, to allow you to get to grips with the actual programming ideas (which, in the beginning, are relatively simple).
For that reason, you might consider playing around with JavaScript, where the effects of your changes are just a "refresh" away. Get hold of jQuery and play with the tutorials, maybe. (Install Firebug so you can see what's going on in your code)
Javascript can actually be a real app since you can store information in an SQL database on the client (in the latest browsers). My first iPhone app was actually a JavaScript page that stores data in SQLite, and uses a CSS template to look just like a native app (it's a Hacker's Diet implementation).
But fnid is right: fundamentally, you need a problem to solve. It's most fun if you implement something that is directly useful to you.
I second this one but would recommend learning Javascript by using Greasemonkey and the introductory guide "Dive Into Greasemonkey" which was discussed here recently http://news.ycombinator.com/item?id=897706.
Greasemonkey lets you make changes to websites by writing small programs and it is fairly easy to find problems around the web to fix.
Example problem to solve: Hide posts on Hacker News from blogs that you already read elsewhere or that you don't like.
While I wholeheartedly agree with fnid (see his sibling post) that you won't actually learn anything until you are scratching your own itch, the most fun way I can think of to learn to program is to make a game.
Flash (and actionscript, which is akin to Javascript) would allow you to do that with graphics... but if you don't want to mess with that, just make a text-based game. Something simple like two player tic-tac-toe with an AI, just displaying a new board after every move, would get you a long way. Python and Ruby are good languages for things like this... as is Scheme or Javascript.
Reminds me of one of my favorite books ever, Gershenfeld's "The Nature of Mathematical Modeling".
http://www.amazon.com/Nature-Mathematical-Modeling-Neil-Gers...