{"id":1593,"date":"2013-09-14T10:24:49","date_gmt":"2013-09-13T22:24:49","guid":{"rendered":"https:\/\/www.deltics.co.nz\/blog\/?p=1593"},"modified":"2013-09-14T10:24:49","modified_gmt":"2013-09-13T22:24:49","slug":"learning-valuable-lessons","status":"publish","type":"post","link":"https:\/\/www.deltics.co.nz\/blog\/posts\/1593\/","title":{"rendered":"Learning Valuable Lessons"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\">4<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span><p>Iztok has been at it again, making comments that prompt another post.  \ud83d\ude42  He expresses his view that there are only two viable options for mobile development.  The first is essentially the web-based technology approach (HTML\/JS\/PhoneGap etc) and the other is the platform native tool chains, Eclipse\/AndroidStudio\/Xcode etc.<\/p>\n<p><!--more--><\/p>\n<p>He may be correct about the latter, and at some point in the future I may have to switch from <strong>Oxygene<\/strong> to those platform tool chains.<\/p>\n<h3>The Future Perhaps Lies in the Past<\/h3>\n<p>Before <strong>Oxygene<\/strong> I already tried those platform tools.  I just couldn&#8217;t get on with <strong>Eclipse<\/strong> at all and have always hated <strong>Java<\/strong>.  I also started learning <strong>Xcode<\/strong> and <strong>Objective-C<\/strong> and whilst this was vastly more enjoyable than <strong>Java<\/strong>\/<strong>Eclipse<\/strong> and I could appreciate the idiosyncrasies of <strong>Objective-C<\/strong> at a technical level, it was still not what I&#8217;d call fun.  And when the learning is for it&#8217;s own sake, fun is a key ingredient.<\/p>\n<p>The problem I think is\/was this:  I have 20 years of <strong>Pascal<\/strong> behind me (plus numerous other languages, but <strong>Pascal<\/strong> has been my principle language skill).  With so much ingrained knowledge, It&#8217;s asking a lot to learn a new IDE, a new framework (two in fact) and a new language all in one go.  A far different proposition than when it&#8217;s the first and only thing you have learned, with no habits and preferences having had time to bed in.<\/p>\n<p>But lest you get the wrong impression, I am by no means a <a href=\"http:\/\/www.thefreedictionary.com\/monoglot\">monoglot<\/a>.  Over the years I have used <em>many<\/em> languages in a commercial setting, sometimes even at the same time (i.e. within a single project\/product development).  These have included, in no particular order:<\/p>\n<ul>\n<li>COBOL<\/li>\n<li>various BASIC dialects (GW, SuperBase, DATA\/BASIC, VB)<\/li>\n<li>FORTRAN<\/li>\n<li>Modula-II<\/li>\n<li>TurboPascal For Windows<\/li>\n<li>C\/C++<\/li>\n<li>SQL\/Windows<\/li>\n<li>PowerBuilder<\/li>\n<li>Java<\/li>\n<\/ul>\n<p>and, of course<\/p>\n<ul>\n<li>Delphi<\/li>\n<\/ul>\n<p>Something I have found over the past 20 years is that I &#8211; personally &#8211; find it easier to learn by relating new knowledge to the fundamentals of familiar ones before grappling with the entirely new aspects.<\/p>\n<p>I find that it helps to have familiar points of reference off of which to hang your learning.<\/p>\n<p>Whether this was a habit I formed from my first experience of acquiring a new (i.e. more than one) language or whether that first experience was simply the first time I was exposed to this method of learning, I don&#8217;t know.  Cause or Effect ?  I&#8217;m not qualified to decide.  \ud83d\ude42<\/p>\n<p>But that first experience provides a useful &#8211; and simple &#8211; illustration.<\/p>\n<h3>From BASIC to &#8216;C&#8217; &#8211; via Pascal<\/h3>\n<p>I found my way into this industry through an informal path &#8211; entirely self-taught.<\/p>\n<p>The first language I tried to learn after <strong>BASIC<\/strong> on various home computers (<strong>ZX81<\/strong>, <strong>TI-99<\/strong>, <strong>Amiga<\/strong>) was &#8216;<strong>C<\/strong>&#8216; (<strong>SAS\/Lattice<\/strong> on the <strong>Amiga<\/strong>), and I found it near impossible to start with.  I just could not get my head around pointers and you couldn&#8217;t avoid them since strings were built on them!  The syntax and notation perhaps made it harder (for me, for some reason).  Then I found the <strong>HiSpeed Pascal<\/strong> compiler for the <strong>Amiga<\/strong> &#8211; based on <strong>TurboPascal 5<\/strong>.  This was much easier, coming from a <strong>BASIC<\/strong> &#8220;background&#8221; (remember we&#8217;re talking teenage bedroom years here, not practical working experience or classroom learning).<\/p>\n<p><strong>Pascal<\/strong> enabled me to learn some more advanced concepts in relatively familiar territory.  Strings in particular were something I could just &#8220;work with&#8221; just as I had been able to in <strong>BASIC<\/strong>.  I simply had to learn new ways of doing <strong>LEFT$<\/strong> and <strong>RIGHT$<\/strong> etc (learning <strong>BASIC<\/strong> on the <strong>Amiga<\/strong> meant I had already progressed beyond <strong>WHILE INKEY$ WEND<\/strong> as an &#8220;event loop&#8221; :))<\/p>\n<p>But pointers did also exist in <strong>Pascal<\/strong> and in that setting I could make sense of them and the concepts.  Thus armed with what I learned in <strong>Pascal<\/strong> I could tackle <strong>&#8216;C&#8217;<\/strong> again and this time it was (relatively) easy.<\/p>\n<h3>What Does All This Have To Do With Delphi ?<\/h3>\n<p>Learning for learning&#8217;s sake is all well and good, but when your livelihood depends on skills that you must learn it is also important to choose to learn skills that will continue to support that livelihood.<\/p>\n<p>What is unavoidable is that mobile development is going to become only more important, though I do not believe it will ever entirely supplant the desktop.  At least not any time soon.<\/p>\n<p>So I understand the attraction of <strong>FireMonkey<\/strong>.  It reduces the learning challenge to just one:  a new framework &#8211; with the promise of easy access to these new mobile platforms.  But that framework is a niche within a niche and the knowledge gained isn&#8217;t remotely portable outside of that niche.  Furthermore, it is my view that the FireMonkey platform is fundamentally flawed both in concept and execution.<\/p>\n<p>Whether you agree or disagree isn&#8217;t the point for this discussion.  It&#8217;s my personal view, and it has informed my learning choice.  That is all.<\/p>\n<p>That choice is of course <strong>Oxygene<\/strong>.<\/p>\n<p>Perhaps in time I might have to switch to <strong>Xcode<\/strong> and <strong>Android Studio<\/strong>, but in the meantime I can focus on learning the SDK&#8217;s in the comfort of a familiar language (actually a better version of the one I am used to) and a (more) familiar IDE.  And if <strong>Windows 8<\/strong>\/<strong>Windows Phone<\/strong> becomes more important than it currently is, I am also gaining familiarity with the environment in which I will have to work to support those &#8220;natively&#8221; as well.<\/p>\n<p>I can honestly say that I am learning <strong>Android<\/strong> and I am learning <strong>Cocoa<\/strong> and <strong>iOS<\/strong>, in a way that could and should prove useful in the future, whether in the context of <strong>Oxygene<\/strong> or not.<\/p>\n<p>But perhaps the real point is that using <strong>Oxygene<\/strong> to learn these frameworks reduces the scale of the challenge to a point where it becomes <strong>FUN<\/strong> in much the same way that Delphi 1.0 made learning the Windows API fun.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\">4<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span> Iztok has been at it again, making comments that prompt another post. \ud83d\ude42 He expresses his view that there are only two viable options for mobile development. The first is essentially the web-based technology approach (HTML\/JS\/PhoneGap etc) and the other is the platform native tool chains, Eclipse\/AndroidStudio\/Xcode etc.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":[]},"categories":[212,4,1,213,180],"tags":[153,135,137,214,181,211],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1TKYv-pH","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1845,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1845\/","url_meta":{"origin":1593,"position":0},"title":"Another Great Oxygene Release","date":"03 Oct 2013","format":false,"excerpt":"RemObjects have officially released the September update to Oxygene with the usual round of bug fixes and some dramatic improvements in the tool chain. Cocoa - Principally iOS 7 My focus with Oxygene most recently has been on the Android side. My previous experience with using the Cocoa (iOS) support\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1457,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1457\/","url_meta":{"origin":1593,"position":1},"title":"Learning Cocoa with Oxygene and Objective-C","date":"11 Aug 2013","format":false,"excerpt":"When XE4 came out and the full extent of the bait and switch perpetrated by Embarcadero became clear, I decided that my money was better spent with RemObjects and their Oxygene product. But it has only been this past weekend that I finally found some \"quality time\" to spend with\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-08-11-at-17.39.14-.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1713,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1713\/","url_meta":{"origin":1593,"position":2},"title":"How to Call Java Code from an Oxygene Android Application","date":"20 Sep 2013","format":false,"excerpt":"Lachlan just posted a link to a post on Google+ (also available as a PDF) demonstrating how to call Java from Delphi XE5. I was shocked at both the amount and the nature of the code involved. It is long, convoluted and ugly stuff (nb. that isn't a criticism of\u2026","rel":"","context":"In &quot;Android&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2393,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/2393\/","url_meta":{"origin":1593,"position":3},"title":"Come on Baby, Light My Fire","date":"25 Apr 2016","format":false,"excerpt":"Earlier this year, the Fire IDE for Elements was officially released after a fairly extensive beta. I have previously stuck with Visual Studio for the [relatively little] Elements work I have been doing but problems with my VM solution on a recently acquired MacBook Pro gave me the impetus to\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Fire-Initial-Project-300x214.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1199,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1199\/","url_meta":{"origin":1593,"position":4},"title":"Oxygene &#8220;Nougat&#8221; is Mac and iOS !","date":"06 Sep 2012","format":false,"excerpt":"Marc Hoffman has confirmed that \"Nougat\" is to Mac\/iOS as \"Cooper\" was to Java. \u00a0Some have speculated that this will be based on Mono, but Oxygene has had Mono covered for some time already, so I strongly doubt that this is the case. Far more likely is that just as\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2327,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/2327\/","url_meta":{"origin":1593,"position":5},"title":"On The Shoulders of Giants&#8230;","date":"18 Dec 2014","format":false,"excerpt":"When discussing mobile device application development using Oxygene or other RemObjects Elements technologies, the question of user interface designers doesn't usually take long to come up (particularly with Delphi developers). Up to now the answer has always been Xcode Interface Builder for iOS\/OS X, Visual Studio WinForms\/WPF Designers for .Net\u2026","rel":"","context":"In &quot;Android&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/1593"}],"collection":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/comments?post=1593"}],"version-history":[{"count":7,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/1593\/revisions"}],"predecessor-version":[{"id":1600,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/1593\/revisions\/1600"}],"wp:attachment":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/media?parent=1593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/categories?post=1593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/tags?post=1593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}