9 ms·
My first reaction to this was negative. I immediately objected to choosing Haskell. I've been teaching my own 14 year old son. I started him with C, then on t
by robomartin 13y ago
My first reaction to this was negative. I immediately objected to choosing Haskell. I've been teaching my own 14 year old son. I started him with C, then on to Forth, Java and now about to move into Python.
Then I stopped to remember the process. It has been ridiculously hard. It has required a ton of engagement on my part. Without me being a constant cheerleader it would go absolutely nowhere. My kid likes programming but, let's face it, today there are tons of distractions and you are in competition with all of it.
I would imagine it is really hard to teach a random group of 14~16 year olds. I would really like to learn more about this from others with experience in this area.
- SomeRandomUser 13y agoIt may be frowned upon around here... but when my friends asked me to point them in the right direction to learn programming I just gave them a copy of "Beggining Visual Basic", showed them some simple code and how to make a simple app with VS. It may not be the best language around, but it's simple and you can make something that works in Windows ridiculously easy. If they show continuous interest, then they will hear about some other languages but most people just want to see something working with buttons and text boxes and then after a few weeks they lose interest. It's like going to the gym, some of us love it but it's not for everybody. And if it's your first time, don't spend time with a complex routine... just run on the treadmill until you feel tired. If you like how it feels, then you will keep coming back, and if you don't, you didn't waste time doing the advanced exercises that are useless without continuous workouts. Disclaimer: I told them that programming serious applications takes a lot of time, hard work and lots of reading and practicing. They just wanted to make toy applications. They were instructed to never deal with secure applications or production critical applications until reaching programming enlightement.
- m0th87 13y agoI started on VB. The whole "it rots your brain" argument is complete bullshit - there's nothing to keep you motivated through the hours (years) of work it takes to become a good developer like a programming language that lets you create a functional GUI in a few hours.
- cmircea 13y agoTo be fair there's little VB can do that C# can't. Including drag-drop GUI in VS.
- xzel 13y agoWhat is more important is about easy learning and generated interest. VB provided a simplistic and verbose language which makes easy to understand and it pretty easy to learn. I love C#, but I probably wouldn't recommend its power for someone only touching the basics and making simple things.
- gus_massa 13y agoTo be really fair there's little VB can do that C# can't do NOW. Including drag-drop GUI in VS. In the 1990's C# didn't exist and to it was much difficult to create a GUI in C++ than in (Classic)VB.
- rbanffy 13y ago> I started on VB. The whole "it rots your brain" argument is complete bullshit I started with Applesoft BASIC on the Apple II series and I'm not so sure about the bullshitness of the argument. Dijkstra was not talking about VB at the time. It's nearly impossible to explain recursion in terms of "classic" BASIC. I'm lucky I also learned C and FORTH (through the wonderful GraFORTH environment). Because of that, the quality of my Basic code (my first job was programming educational software for Apple IIs) was much increased. In order to properly assess the damage, you must ask yourself how comfortable you feel with concepts that cannot be expressed in your first (or "native") language.
- kazagistar 13y agoSure, but these days, Lua is almost certainly a better alternative, and actually provides neat things like first class function closures while maintaining it's simplicity.
- dllthomas 13y agoCarmack said he was tempted to teach his son Haskell; I'm not sure it was a joke.
- chongli 13y agoThe key to really getting Haskell is learning to build a dialogue with the compiler. Sure, the type errors are intimidating at first -- they pack a lot of information and use precise technical terms -- but once you figure one or two of them out you quickly begin to recognize the patterns. After that, you begin to feel comfortable correcting the type errors and subsequently feel confident about your program when it passes the type checker. After a certain point in your progression, you realize that you can make certain type errors deliberately so that the type checker will tell you what types it's expecting. This is when it all clicks! The type checker is a tool that lets you query for information about your program. It's an immense aid to reasoning and a powerful sanity check against your assumptions. This is a capability that less strictly/statically typed languages lack and it can lead to a lot of surprises and guesswork.
- Kiro 13y agoI hope you realize we're talking about kids who has no prior interest in programming. I don't think teaching them to build a dialogue with the compiler is a key to anything in this case.
- chongli 13y agoI'm just speaking from my own experience teaching myself and subsequently teaching a friend. In the case of my friend, Haskell is his first programming language and he was absolutely delighted when he discovered that the compiler is an entity with which you communicate and that its communications help you understand its context.
- tikhonj 13y agoAu contraire: an interactive system with immediate feedback is perfectly didactic. Haskell isn't quite there yet--the error messages are somewhat cryptic and the interactivity isn't quite polished yet--but it's on the right track. Certainly further along in this vein than any other language I know! Some new features like deferred type errors and type holes are going to really help with this. Especially once editors start taking full advantage of this. I think that this is the future of programming: not writing a program and then debugging it, and not even just working in a repl, but being actively guided by your tools seamlessly as you write your code. Having a dialog with the compiler.
- p0nce 13y agoSorry but... Why didn't you try BASIC? Tons of people learned this way with almost no supervision.
- progman 13y agoI believe most people who learned programming with C, Java, VB or Python have a hard time to learn Haskell, Forth and Lisp because of their approach. If you really want to "get" Haskell, Forth and Lisp you have to "think" their way. There is a good reason why one of the most important Forth books was titled "Thinking Forth". Lisp is also very different from C and Java, and you have to change your thinking radically to understand and to apply the power of Lisp. Now I am determined to learn Haskell, and I believe that I have to change my thinking much more into a mathematical approach.
- Tichy 13y agoI would expect C to be the hardest language to learn. Frankly, I think your choice of progression of teaching languages seems extremely odd to me. Why not start with the easiest language (Python, or even JavaScript)?
- robomartin 13y agoThere's nothing hard about C. I fail to find support for your position on this. Pointers? Really? Nothing could be simpler so long as you understand how a basic microprocessor works. Perhaps I see it this way because I started my programming experience typing machine code into a hex keypad. I can see that someone who comes from a frame of reference devoid of low level exposure can get confused by something as simple as pointers. Even so, easy teaching analogies abound, for example: A pointer is the number of the post office box. The data is what it contains.
- OrsenPike 13y agoIMHO you started him with boring languages. C and Forth? If he has an Android phone I would have started with Java. Otherwise I would have just started with Python. He would probably have found it much more engaging than C to begin with and wouldn't have required so much work on your part. Just my 2c from personal experience like yours.
- walshemj 13y agoI would not start with java its such a wordy language and seems to require and inordinate amount of effort and an uber fast machine) to set up a working tool chain. You should start with basic prcedural languages first leave OO for later
- NAFV_P 13y agoC is like a Lockheed F104-Starfighter, fast and hazardous. This gives it an alluring appeal, along with its amoral nature. Also, I would say that languages get more interesting the more you understand about them.
- wslh 13y agoI taught programming to 10/11 years old kids using Turbo Pascal 5.5 in the 90s. The experience was very good and the teaching was oriented to doing video games like the classic snake, roulette, and others. The main issue was their intrinsic interest/motivation/discipline. It is important to note that I am talking about average kids with curiosity. Now I feel that is extremely easy to teach kids with the tools in hand but parents must start slowly. Programming languages like C have many concepts (i.e.: pointers) that must be added at a later stage. I think even Alice 3D or Scratch are complex. I feel the Logo approach is the right one (a graphic feedback and an immediate command line at the same time). Also, combining the manipulation of real objects like cars and robots with programming is an excellent approach.
- happy_dino 13y ago“I tried to teach my son some of the most horrible to learn languages. It didn't work out well.” Colour me surprised.
- robomartin 13y agoNo, I color you ignorant. There's nothing horrible or difficult to learn about any programming language. Maybe you had a bad teacher or, if you are a self taught programmer, you skipped fundamentals. My kid has not has difficulty learning. I never said that. The challenges are in maintaining interest because there are other attractors that lure kids away. There are a lot of things that are vastly more fun than programming. For example, I'd rather go sailing, kayaking, fishing, scuba diving or mess around in the garage than sit in front of the computer programming for ten hours. Perspective is important.
- happy_dino 13y agoWow, no need to get so defensive. You basically gave your child a job training, concentrating on technology which is popular today (and probably at the time when he is looking for a junior maintenance developer position, too). Nothing wrong with that. If I decided to teach my child programming, I would certainly try and pick the best, most consistent, fun & exciting, state of the art technologies out there which would expand the mind of my child about what's possible today and inspire my kid to push the boundaries when he grows up (if he/she ever decides to pursue that career option). Different decisions, and one could make the case for both.
- robomartin 13y agoWell, I apologize. I did not appreciate your mock translation of what I said as it really was way out there and not at all in line with the reality and motives for my choosing C, Forth, Java and Python. In other words, what you said is not what I said. And then you sarcastically expressed incredulity for my choices. Really, saying that these are "the most horrible to learn languages" is beyond my comprehension. There's nothing "horrible" or, for that matter, difficult about any of them. C is easy as pie. It's the most fundamental language. Forth is a super-cool game. My kid already rocks on an HP-41 calculator (RPN). When I introduced him to Forth he literally said: "Wow! I can program in RPN!". Java, was a short stepping stone as I wanted to give him a quick taste of OO but not drown him in the details. He actually wrote a dozen little games with graphical interfaces and all. Great fun. Now with Python we are going through the Project Euler site problem by problem implementing solutions mostly in Python but then looking at C and Forth where it makes sense. It's hard work. At the same time I like it because it keeps me on my toes. At one point I'll have to choose whether to move him towards developing, say, iOS apps or web apps. In other words, there's at least one fork in the road ahead. However, the principles are all the same. The constructs are fundamentally equal. A state-machine driven website is no different than a state-machine driven iPhone app. Same concepts, you just "say" them differently in code. And so I fail to see or agree with people who make categorical statements such as "C is horrible" or "C is hard to learn". I don't get it. Yeah, from the vantage point of someone with no frame of reference whatsoever even basket-weaving is horrible and hard to learn. At one point you start taking steps towards learning and, if a good foundation is built, nothing is really horrible, difficult or impossible to learn. To me, C is the foundation of nearly all you'd want to understand in programming. Only assembler would give you more perspective. I have written plenty of software with complex data structures in assembler. Not for the weak of heart, but you do learn a lot. With a solid foundation in C you can undertake just about anything in any domain, from embedded to web and mobile programming. So, yes, I felt that taking what I said so far out of context and then expressing surprise for your own made-up statement had to come from ignorance. Perhaps I shouldn't have said it the way I did. So, again, I apologize.