What’s Next?

Week 12 brings us to the end of the first module, GAM710. I know this is oxymoronic, but it really has been a long 12 weeks that have passed in the blink of an eye. GAM710 has been very challenging (partly due to the breadth of study, and partly due to setting the bar high for myself), but I have enjoyed it and learned a lot. Some of the SMART goals that I set along the way have already been achieved, while others are still a work in progress. Some I intend to have completed before the next module begins, but I have intentionally included some longer term goals and aspirations that will continue to progress throughout the rest of my MA studies, and beyond. These include:

Flutter Development

I am now in a position to begin building a functional prototype for my “Quick Cook Challenge” app. I am confident that I made the right choice of development strategy and I’m looking forward to investing more time in honing my skills in this area to move along the learning curve in pursuit of mastery. Now that the intense period of reflection has come to an end, I can take a lesson from Adriel Wallick in her video talk “Game a Week: How to Succeed, Fail and Learn”. I need to put in the development hours to make the progress that I’m looking for.

I set a SMART goal to investigate prototyping tools for designing screen mock-ups, but now that I have had the opportunity to gain some familiarity with Flutter, I have concluded that best strategy here is to use rough pencil and paper sketches and then jump straight into Flutter, rather than involve an intermediary tool for high fidelity images.

I do intend to spend some time learning more about source control before the next module commences, but I’m now not overly concerned about reaching any particular level of expertise. As long as I can get a handle on the basic elements, I can learn on the go, on an as and when required basis.

Agile

Agile is a new concept for me, but I feel that, during this module, I have grasped a solid theoretical understanding of the general mechanics involved. I am looking forward to immersing myself in a situation to experience the practical application of the project management methodologies.

Through some trial and error, I feel that I now have a better handle on the effective use of a Trello board to organise my work schedule, and I intend to take a more disciplined approach to sprint planning and review, going forward.

Commerce

New practices, tools and techniques have emerged since I first set out on my corporate career path, and while I have some level of familiarity with them, this module has persuaded me to delve deeper into the likes of Lean Startup Methodologies, Business Model Canvas and Strategic Digital Marketing over the duration of the remainder of my MA studies, so that I can embrace them for the benefit of my intended startup venture.

Emerging Technologies

Data science – big data, machine learning and predictive analytics hold particular interest for me. I have a lot of data analysis experience and enjoy unleashing the power that good data holds. I am aware that these are huge areas of study, but I intend to take my analytical talents to the next level by exploring these areas in more detail, with the purpose of creatively integrating these technologies into the app product that I eventually build for my intended startup venture. This will dramatically improve the value offered by my business model.

I am looking forward to getting stuck in to some practical development work in GAM730, and it will be great to gain some practical experience of working on a collaborative project managed with Agile principles and techniques. But, before that happens, I’m really looking forward to enjoying some downtime to overcome the ‘extreme reflection fatigue’ that I’m currently battling!

Flutter & Dart Progress

My proposed business venture requires an app with reach to the majority of the market, so my preferred development strategy is to use Google’s open source Flutter framework to create mobile apps for both Android and iOS platforms. Flutter uses Dart, a strongly typed object orientated language, to build a single code base that is compiled to native code for both platforms, eliminating the need for separate code sources.  Ahead-of-Time compilation removes the need for a bridge, so Flutter apps achieve faster and superior performance over those from alternative hybrid development frameworks, like React Native and Xamarin.

Bringing a very limited amount of Java coding experience to the course, and only managing to gain a brief introduction to Flutter at that time, restricted my deliverables to for the app jam to just a paper prototype for my “Quick Cook Challenge” concept.  However, my Java work provided some familiarity with object orientated programming principles, which facilitated my shift to Dart, and I’ve found the language to be considerably easier to learn.  I’ve since built several basic apps under the instruction of tutorial courses (1 Dart and 3 Flutter) that I’ve now (almost) completed.  I’m becoming increasingly comfortable working with the Flutter framework, and rapidly gaining confidence in building basic screen layouts with step-by-step instruction.  I’m also beginning to apply and deepen my comprehension by anticipating small code snippets within tutorials, ahead of the implementation. Engagement with the community through social media, particularly Facebook groups, Twitter and Medium, is also helping me to explore the potential that Flutter offers.

Once I’ve completed my third Flutter course, I will build my own layouts for the “Quick Cook Challenge” app from the jam.

While Flutter development will be an ongoing process for me, this SMART goal focuses on the short-term progress that I intend to make, in preparation for the next module.  The following diagram illustrates my long-term vision for my route to mastery of the Flutter framework.  The curve is inspired by Charles Handy’s concept of “Life Cycle Thinking” , and Whitney Johnson’s application of his S-curve (or Sigmoid Curve) concept to illustrate the development of competence in a new domain of expertise.   I further developed this concept to reflect the anticipated evolution of the Flutter Framework, and the continued learning opportunity this will present during the “Mastery” phase. The red arrow indicates my perceived current progress along the curve:

Over the long-term, I anticipate 4 phases of development:

  1. BEGINNER: Learning to use Flutter to the point where I am capable of building a complete functional low-complexity multi-screen app, with effective screen transitions and logic that makes the app useful.
  2. RAPID PROGRESS: Exploring more advanced Flutter widgets and features, incorporating them into higher-complexity apps
  3. PLATEAU: A period of consolidation and experimentation, using widgets and plugin combinations in concert to develop more creative and original apps
  4. MASTERY: An infinitely ongoing phase for me to really test and push the limits of possibility within the framework, and expand the possibilities by developing my own plugins.

By 3rd June I will have built a complete functional prototype for my “Quick Cook Challenge” app (from the jam) to reach the end of my ‘Beginner’ phase.

Proficiency in developing Flutter apps is the key core capability I want to gain from this course.  I’d considered the alternative strategy of partnering with an established Developer in order to launch my startup, but for various reasons (primarily financial and control), I opted to upskill myself instead.  If I don’t achieve app development competency over the duration of the course, I will consider myself to have underachieved.

Tutorial courses work, and I will continue with them, but I need to incorporate alternative methods to help take my understanding and familiarity to a deeper level.  I will use Google’s Flutter Widget Catalogue as a guide, and build my own representations of standard widgets (the building blocks of Flutter).  I’m a visual learner, so building models that are meaningful to me provide opportunity for elaboration and active retrieval, which, according to Anders Ericsson’s Deliberate Practice theory, are proven strategies for strengthening comprehension.

I will prioritise the widgets with a Pareto (or, “law of the vital few”) approach, assuming 20% of the standard widgets will deliver 80% of the results I need.  Joseph Juran suggested the principle after recognising that economist Vilfredo Pareto’s observed 80/20 relationship between land ownership and population, held validity as a general rule of thumb for much wider application. A relevant example: Microsoft reports that fixing the top 20% of reported bugs eliminates 80% of errors and system crashes.  After addressing 20% of the widgets, I’ll add to my catalogue as I use new ones.

This milestone is predominantly a solo project, but support is available within the study group and the wider Flutter community. The SMART goal is:

Specific

I will build a functional prototype for my “Quick Cook Challenge” app.

Measurable

I will construct a Trello board to chart progress, and manage my schedule effectively, implementing weekly sprints to achieve the complete app.

Achievable

Time and technical capability are my constraints. The Trello board will help schedule my time effectively, and I’ll use tutorials and Stack Overflow to assist with any challenging aspects.

Relevant

This is the foundation milestone for my future Flutter progression, which is a key factor for success for my intended startup. It will also enable my contribution to collaborative coding projects during upcoming modules.

Time-Bound

This will be achieved by 3rd June. I will dedicate 18 hours per week to achieving this.

Flutter: Getting Started

This course is exactly what I need in order to commence my Flutter development. I’m only half way through, so far, but this is enough to convince me that Flutter is indeed the best way for me to proceed.

There are step-by-step instructions for building a number of simple apps. Although I am copying the code provided, it is helping me to gain an understanding of how the Dart language is used to nest widgets in order to build up screen layouts. Here are photos of the two apps that I have built with this course to date:

The tutorial uses Visual Studio Code as it’s IDE, whereas I am using Android Studio, due to my familiarity with it. There have been a few instances where I’ve needed to use Google to find the AS equivalent of a VSC keystroke or function, but on the whole, it hasn’t really posed much of an issue.

The tutorial also uses an earlier version of Dart. I came across a situation where a void class was used in the tutorial to return a null response, which worked fine for the instructor. But when I came to run the code, Android Studio flagged an error. A little research informed me that Dart version 2 treats void classes differently to version 1. I need to find and take a general Dart course to help me to become comfortable with Dart, and fully understand this void situation. However, I managed to overcome the runtime error by bringing the commands within the void class into the main class. I know that this is not the optimal solution, but with my current lack of Dart knowledge, it was the best fix that I could apply to make the app work as it should.

When I compare my (albeit, currently short) experience of Dart and Flutter to a similar point in my learning Java for Android, Dart and Flutter seem to be so much easier to take on board. It took me a long time to get to grips with Java (the first real Object Orientated Programming language that I had experienced). Although I was beginning to feel some semblance of a level of confidence with it come the end of my nanodegree course, I was still unable to build complex code structures, such as recycler views, asynchronous tasks and JSON readers, without following along with a tutorial. I’m sure this will be the same with Flutter, but I suspect that this stage will not last nearly as long, as the code seems to be far simpler. Flutter also offers on-screen options that appear as you commence typing, making it a far more intuitive coding experience than Java is. Having said that, I fully appreciate that the Java learning experience is helping to make learning Flutter easier than it otherwise would have been, so i still consider that to be time well spent.

The hot reload function that Flutter offers is also a huge development-time advantage over the Java method of rebuilding the app every time you want to see your code running on a device or emulator. After the first load,hot reload simply sends and implements just the changes that have been made to the code, and so it is infinitely quicker, less than a second in some cases (as opposed to minutes), saving a considerable amount of development time over the course of a project.

This early on, the one area that is causing me problems (so far) is using the correct bracket type – (,{ or [ – and punctuation marks – colons, semicolon and commas – in the right place for the widgets to be properly nested. It can get quite confusing, but it’s just a case of practice makes perfect. Completing this course and going through the other 2 Flutter courses will provide me with plenty of practice in this area, but I also think that a general Dart beginners course will be really useful with this too, so I will seek some out.

In addition, I have sourced a kindle book for Dart, which I will start reading soon. I have also just discovered an article on Medium that lists a number of IDE shortcut keystrokes that will be very helpful with getting this right.

I can see a lot of potential for Flutter. I have very much enjoyed my first real experience with it, and I’m looking forward to spending a lot more time learning. Disappointingly, for the next couple of weeks, the app jam will have to take priority and so I will be unable to afford as much time as I would like, if any, with Flutter tutorials. I’m hoping that the workload will calm down a bit after that, so I can get the opportunity spend some good quality time establishing some solid Flutter skills.

Develop With Flutter And Firebase

This course runs for less than an hour, and so I wasn’t expecting too much from it. It was too early in my learning to be looking at integrating Firebase with Flutter apps really, but it was worthwhile in so far as I now have a conceptual appreciation for the functionality, and I can always come back to the video when I am at a point where I need to integrate Firebase.

Learning Google Flutter for Mobile Developers

This course runs for less than 2 hours, so I didn’t expect to emerge from it with any level of expertise, but I was still left a little disappointed. While it was interesting, I didn’t find it particularly instructional. It did, however, give me a flavour of what to expect from Flutter, which was good, but I certainly didn’t feel equipped to start coding afterwards. Not to worry, this just the first of 5 courses that I have lined up…

.

Test Driving Flutter

Following last week’s in-depth research into development strategy options (which actually ran well into this week too), I’m keen to roll up my sleeves and get stuck into learning how to develop Android & iOS apps with Flutter.

I found 5 video tutorial courses:

  1. From Lynda: Learning Google Flutter for Mobile Developers
  2. From Lynda: Develop With Flutter And Firebase
  3. From Pluralsight: Flutter: Getting Started
  4. From Udemy: The Complete Flutter App Development Course for Android, iOS
  5. From Udacity: Build Native Mobile Apps with Flutter

I’m sure there will be a certain amount of commonality between them, but going over the same things a few times can only do me good in the long-run, and it will be interesting to see different perspectives, and whether there are alternative ways of doing things.

On the flip side, I am expecting each course to have at least some unique content, and so I think it will be highly beneficial for me to work my way through all of these courses, and more besides.

Design a site like this with WordPress.com
Get started