Hello! First of all heartfelt congratulations! I am intrigued by your choice of language Scala for developing Kojo, even though your profile clarifies your familiarity with Python. I am new to this field of teaching computing to kids, and have been evaluating various alternatives. It will be nice if you could clarify the tradeoff in using Kojo vs Scratch (MIT), Snap (UC Berkeley), Looking Glass (WUSTL), Greenfoot (Kent, UK) and any other similar tool you care to distinguish Kojo with, all at one place My (perhaps erroneous) understanding is that pure visual programming aids have limited features you wanted to expand on, whereas more flexible tools were Java based and are difficult for kids to pick up. If so, why not develop something similar based on Python which is already being used worldwide for teaching coding to kids, in conjunction with flexible (e.g cross platform) & relatively easy (for graphics, gaming) Kivy package? Is that choice is just for historical reasons (kivy is new)?
The tools that you mention are all excellent in their own ways. So you really need to do your own evaluation to figure out what works best for you, given what you are trying to achieve.
As far as the question why Kojo (using Scala/JVM)? is concerned, here's something I wrote up last year:
http://wiki.kogics.net/kojo-faq
Feel free to ask more questions if that link does not quite answer your questions about Kojo.
(I need to go and revise that page based on all the water that has flown under the bridge over the past sixteen months, but the current content in there is a fair reflection of the ideas behind Kojo).
Hi Lalit, thank you for your prompt response. I went to the link and indeed it does throw light on why Kojo, but my question is not why Kojo. My question is why Scala. I am sorry I may have mis-communicated before and I hope my query is clearer now.
The only relevant text I found on the link you gave, in terms of a possible response to my query, was this: "The programming language used within Kojo (Scala) commands some of the highest salaries in the software engineering profession around the world. So all the work that kids put into Kojo has very practical benefits, in addition to all the rich learning benefits." The kids i have to teach are at a age where they dont really care about salaries or profession (meaning they are too young for that). May I please know if there is any other reason for your choice of Scala? I am especially interested in knowing advantages vis-a-vis some similar tool that could be Python+Kivy based.
In other words if Kojo were to be redeveloped from scratch would you still choose Scala or would you rather use Python and Kivy. I am aware that in software development often the choices have been made for some historical reasons and we get stuck with them, because at that time it seemed like a good idea given what else was available back then. Therefore I am not criticising your choice of Scala, but merely trying to evaluate for myself whether it would make sense to start from scratch. I am not wedded to Scala or Python or any other language for that matter. However, I heard from random people that the new developments with kivy tilt the balance in favour of Python and because I dont know either, I am checking with (Scala experts like) you whether it would be worth anybody's while putting in 3-4 months reinventing the wheel. Do you feel the new Kojo look alike built on Python/Kivy be a mere cosmetic facelift? This is what I am trying to get at. Hopefully you can give me an opinion with some technical justification (such as what features of Scala were really helpful, but are absent or awkward in Python/Kivy while developing this kind of amazing tool that you have created).
Thanks, and yes once again, congrats on doing a great job helping children, and enhancing the reputation of Indian software developers :) Cheers!
Hi Ash,
You're right, the answer to why Scala doesn't quite shine through on that page (although it's hidden in there ;)). In any case let me jot down some points here:
Scala
- Is very easy to get going with
- Has great support for imperitive programming
- Has great support for functional programming
- Has great support for object oriented programming
- Has great support for concurrent and parallel programming
- Has a deep set of in-built data structures and algorithms
- Has access to everything written in Java
- Runs on a fast/robust VM
All of this makes it easy for kids to get going with programming, and provides them a very well thought out path for exploring (over many years) many different facets of programming.
I'm way more familiar with the Java ecosystem than with the world of Python, so an easy to use and powerful language on the JVM (i.e. Scala) was kinda the natural way for me to go. If I had to do it again, I would make the same choice. Why? Because in the end, the thing that matters (much more than the technology that you use) is what you do with that technology. The only thing you need to be careful about is that your choice of technology should not place aritificial restrictions on whatever you are trying to accomplish. With Scala/JVM, I'm very confident that I'll be well supported (by my technology choice) across a very deep/wide range of potential uses.
Hope that helps…
I am not a Python person, but from what I have learnt from experimenting with both the GUI frameworks, Kivy seems to be a better one. Tkinter is quite old and based on Tcl/Tk, which itself is ancient. Newer UI frameworks need to be versatile, theme oriented and easily customizable. Also, more importantly they should support development for the mobile platforms as well, which I believe, Kivy does.
I have been teaching programming to beginners for many years using Scala both with kids of various ages and with beginner adults at university level. I have also also seen Python in action in teaching to some extent and here are some issues with Python that forms my rationale for choosing Scala over Python:
- Dynamic typing means less help in finding bugs; risk of lower ambition
- No ''typing dialog'' with a compiler means less conceptual learning
- Non-explicit types in function defs is less efficient when learning abstract thinking
- Indentation syntax with silent begin-end can make nested blocks obscure to beginners
- No explicit variable declaration can lead to very hard bugs also for non-beginners
- Refactoring is more risky, hence discouraging -> bad for step-wise problem solving
- Not excellent at object orientation
- Not excellent at functional programming
I have no systematic empiricism behind the above hypotheses but I have some anecdotal evidence that suggest that the above list might be important to address when considering Python.
//Bjorn