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

Reply via email to