As I've been working on my Flex projects, I've noticed several things that I keep remembering as I experience errors, troubleshoot logic, or look up references:
1) Realize That Flex Is Case-Sensitive
This was probably the first thing I had problems with. While I tried to follow case in naming and referencing ColdFusion variables and functions, I still found myself troubleshooting Flex errors due to case-sensitive typos. But you'll get over it quickly.
I've developed Flex using the SDK and command line compiler and while it is free and works, using Flex Builder saves you so much time and effort. The auto compiler, along with the code insight for Flash AND Flex objects and functions, and the lovely debugger makes it so much faster and much more fun to develop. Make the $250 investment for at least Flex Builder Standard and if possible the Flex Builder Pro w/Charting for $699.
3) Understand That Flex and ActionScript Are COMPLETELY Object-Oriented
Having been a ColdFusion developer for the past 7+ years, I never really experienced the true OO nature of a lower-level programming language, aside from Java. I understood the basic concepts of classes, inheritance, encapsulation, polymorphism, etc. but never saw the need in CF because even with components, it's still very procedural and limited in some aspects. But, with that in mind, ColdFusion is also a lot less complex, and in almost every way it is much easier to work with.
4) Get Used To A Completely Event-Driven Architecture
This is one of the greatest traits of Flex (and event-driven programming): every action/event is driven by an action/event. In order to even do anything in Flex, an event must happen. In the beginning a ColdFusion developer might find this frustrating, but in a sense, the same principles apply with ColdFusion, like a user submitting a form, and you process it. It's just with Flex, handling ResultEvents or other Events takes a little getting used to.
5) Know That Flex And ColdFusion Work Very Well Together
From handling queries to structs to arrays to every other variable type, ColdFusion and Flex easily communicate.
6) When Possible, Use RemoteObjects To Communicate With ColdFusion
Speaking of ColdFusion and Flex working well together. If you use remote objects, there will be less overhead in the online communication between CF and Flex. This is because RemoteObjects communicate using the binary Action Message Format (AMF).
7) Remember That ActionScript Is A Lot Like C#.NET Which Is A Lot Like Java Which Is A Lot Like...
(Just in case you're learning C# or interested in learning it) While MXML is tag based (it is XML), you'll usually create a Flex app with a combination of both MXML and ActionScript. Since I've been getting used to ActionScript, I've also been getting used to C#.NET, which is the language used on the web site where I work. They share similar syntax and OO properties and frameworks, which has actually enhanced my learning of C#. It has also helped my Java programming, but then I'm already somewhat familiar with it having used it often with ColdFusion.
I'd like to personally thank Peter DeHaan for creating and managing flexexamples.com. I often reference the Flex code snippets at flexexamples.com to figure out the simplest but most effective solutions.
Another great tool for learning the basics of Flex components and objects. I used it more often while first learning Flex, but I sill sometimes refer to it to remember how to setup and use some objects. It does contain more complex third-party examples too.
10) First, Build A Simple App That YOU Need
I would recommend this with any other programming language, but with Flex it makes a lot of sense. If you can build a Flex app that you need, say a web-based widget or new Flash web site, you'll quickly become familiar with the more basic Flex concepts. Move beyond the irksome and obvious "Hello World" app and build something useful. Then post it online!
11) Get Familiar With The Flex UI Components
Some Flex beginners may find themselves trying to build a list or UI layout component that may already exist. I once tried to build a control almost identical to the TileList control. Why build it if it already exists?
However, sometimes you may want to tweak the control to behave or look differently. Because of #3 above, you can create your own control and extend the control you want to modify. Done that many times, and I love the custom functionality you can create.
12) Blog About The Problems You Find/Solve, No Matter How Simple
Unfortunately, I only blog about some of the problems I encounter and subsequently solve. I hope to do it more often. You'll likely find someone else has the same problem you have solved and you'll save them a lot of time and effort by posting the solution on your blog.
Any other thoughts? Feel free to add a comment!