What are you defining as file IO? What do you mean by re-learn--do you mean forgetting and having to learn again, or learning some new fact that changes your total understanding of the thing? What has gotten me in the past is learning how some particular language does file IO[1], which might mean learning something new about file IO I didn't know before (but didn't matter for what I wanted to do at the time) that expanded my perception. Though I guess the concepts of "read", "write", "rewrite", and "append" are the same.
I really don't think you get any more universality in desktops than you do in the web world. You might get more in the web world if you restrict your universe to the web world, due to a limited selection of choices on the front-end. (And backend too if you go the traditional route of learning LAMP with PHP on a shared host provider.)
Related to the other comment on RAD systems, even NeXTSTEP in '89-'95 had the WYSIWYG concept applied to everything as one of its major selling points. http://www.youtube.com/watch?v=j02b8Fuz73A Around 23:00 Jobs starts to demo making a GUI application that talks to a backend DB and shows pictures, and you don't need to know SQL or joins or anything.
So I don't think the desktop world has been any better in regard to keeping abstractions at bay or offering universal modes of thought (hey fork()!). The first time I programmed something with tkinter I kept asking "Where's my user-defined main loop? Where's my event handler? Where's my render stage? WTF is this 'pack' method?" Because my prior UI experience on a desktop was with pygame, which defaults to having you control every pixel.
[1]Bash likes its pipes and IO redirection, C likes its file pointers, C++ likes its streams, Java likes those too but also likes Buffer Objects et al., PHP has a nice function to glob a whole file in as a string (but you can shoot yourself in the foot if you run out of memory), "Python is obvious", "Perl is magic". If I try and load "./file" what's the context of "." and how does my language let me get a known value for that that's relative to my program and that's platform independent? What about encrypted folders, different file systems, file encoding? Will the language/OS abstract that for me? Now I want to start doing things asynchronously. Now I want to start talking to web files, now I want to start sending cookies and stuff when I'm talking to web endpoints instead of files, maybe I want to do socket IO now, and this whole trip has taken me through several other realms which seem to me pretty far removed from simple file IO.
What are you defining as file IO? What do you mean by re-learn--do you mean forgetting and having to learn again, or learning some new fact that changes your total understanding of the thing? What has gotten me in the past is learning how some particular language does file IO[1], which might mean learning something new about file IO I didn't know before (but didn't matter for what I wanted to do at the time) that expanded my perception. Though I guess the concepts of "read", "write", "rewrite", and "append" are the same.
I really don't think you get any more universality in desktops than you do in the web world. You might get more in the web world if you restrict your universe to the web world, due to a limited selection of choices on the front-end. (And backend too if you go the traditional route of learning LAMP with PHP on a shared host provider.)
Related to the other comment on RAD systems, even NeXTSTEP in '89-'95 had the WYSIWYG concept applied to everything as one of its major selling points. http://www.youtube.com/watch?v=j02b8Fuz73A Around 23:00 Jobs starts to demo making a GUI application that talks to a backend DB and shows pictures, and you don't need to know SQL or joins or anything.
So I don't think the desktop world has been any better in regard to keeping abstractions at bay or offering universal modes of thought (hey fork()!). The first time I programmed something with tkinter I kept asking "Where's my user-defined main loop? Where's my event handler? Where's my render stage? WTF is this 'pack' method?" Because my prior UI experience on a desktop was with pygame, which defaults to having you control every pixel.
[1]Bash likes its pipes and IO redirection, C likes its file pointers, C++ likes its streams, Java likes those too but also likes Buffer Objects et al., PHP has a nice function to glob a whole file in as a string (but you can shoot yourself in the foot if you run out of memory), "Python is obvious", "Perl is magic". If I try and load "./file" what's the context of "." and how does my language let me get a known value for that that's relative to my program and that's platform independent? What about encrypted folders, different file systems, file encoding? Will the language/OS abstract that for me? Now I want to start doing things asynchronously. Now I want to start talking to web files, now I want to start sending cookies and stuff when I'm talking to web endpoints instead of files, maybe I want to do socket IO now, and this whole trip has taken me through several other realms which seem to me pretty far removed from simple file IO.