Lew, I should respond to your comments with the disclosure that I am somewhat affiliated with a university (as a PhD student), currently Maryland, and have taught or TAd a few classes here. My views are from experience teaching (let's say, three or four sections, and then a section of much more advanced grad students), and my previous experience as an undergrad in TAing..
On Wed, Sep 5, 2012 at 3:37 PM, Lew <lewbl...@gmail.com> wrote: > Kristopher Micinski wrote: >> >> I don't think that Android is a significantly new API or programming > > > Compared to what? > Compared to the slew of APIs that undergraduates will typically see. As undergrads here (@UMD) we teach a few different environments. - In our 100 level courses we teach "standard" java, this includes the standard library, but may also occasionally include swing or APIs that the professors have home baked. - In our 200 level courses we teach "old world" unix stuff, including the posix API, and things of that nature - In the 300/400 level courses we have a variety of courses using different APIs, teaching things from OpenGL, to the .NET ecosystem, and things like that. - We also teach theory and the theory of systems and programming languages (through which we teach Ruby, OCaml, etc.., although more niche languages like Erlang are sometimes used as well) I consider that an undergraduate from our department should have enough familiarity with adjusting to different systems that they should be able to take any new language, adapt to it, along with a new API, and get productive work done without being "stuck." We do have a 400 level class covering Android programming, and all of our students were able to adjust to the environment very quickly, and start getting real projects done within one month's time. >> >> environment, and if you know Java (and even if you don't, but know C++ >> or something similar-ish well enough) will be very easy to pick up.. > > > You elide over the difficulties. Java is more than a language, it's an > environment, and that environment is quite different between Android and > other platforms. > I disagree. The core standard "java stuff" is all there. There's a separate API, sure, but the components remain the same. For example, the activity lifecycle mirrors many other state machine processes found in any of these other environments students will have seen before. Students also will (in any good computer science program) cover functional programming concepts (from this you get intents and components, which are typically fairly stateless -- though not *always*), concurrency (students will have seen things similar to AsyncTask<> before, as most courses -- certainly ours at UMD and those I took at my undergrad institution, along with the other courses I've reviewed from probably six other institutions -- cover concurrency and ways to make it easier), and RPC (AIDL, Messenger / Handler combos). Courses at many universities will also typically cover GUI programming, typically in *more than one form*. For example, I believe our courses here cover wxwidgets to some extent, and also the C# GUI stuff, this fits into the more general category of reactive programming, which is covered to a larger extent in our courses on functional programming and theory. So I assume that a student should be able to take Android's GUI system "off the shelf" and know something about "widgets" (views) and things like that. > For example, you could go through years of standard or enterprise Java > programming without every defining a UI in XML. If this is new to you, it > takes some getting used to, and no amount of Java or C++ knowledge is > directly applicable. This might be the case, in practice the way we explained it to students within our Android course was saying: think of this as being compiled to some code which produces equivalent Java code which sets up the GUI, or as a templated language. I know this is just one example, but I would argue that similar things in Android can be explained by analogy to other concepts, once students learn enough material and get a feel for the space. Now, it's entirely possible that students at other universities may be extremely different than the ones I've encountered, but I would suspect that this isn't entirely off base. >> >> If you have a year of time to do so, I'd start by doing the following: >> >> - reading the developer guide >> - playing with a bunch of the sample apps >> - perhaps buying a copy of Mark Murphy's android book (the commonsware >> guide) if you find yourself needing more explained examples of the >> API, etc... > > > You consider a year "easy to pick up"? > No, the "year" came from the OP's discussion that he will be working on the project for a year. I did not mean to imply that it would take a year to learn the Android ecosystem, it does not. > I consider three days "easy to pick up". A year seems on the long end of > what it should take to be competent at Android programming. I would say that by my estimates, it would probably take a month of working through examples at a casual rate (i.e., if the student treated a course on Android to be one of her four or five courses) to understand Android enough to start being productive. However, this estimate is not refined (I've only taught a few people android stuff, and only have a few classes on which to base numbers). I think that the Android API presents some new concepts, but nothing that's so new that it's completely foreign to students. I would really emphasize that all of the concepts in Android are just things students should have seen in new clothing. By the way, if you can find an example in Android of something that is truly new, something that's really people haven't seen before, I'd like to hear about it, we're always thinking of ways to reason about the system and so far seem to be coming up with uninteresting stories :-) (So far the best story I have relates to writing down a dependent type for intents, and the semantics of intent handlers, and things of that nature, which is -- what I see -- the most interesting and novel design feature of the Android framework). Thanks! Kris -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en