Tuesday, September 22, 2009

Resistance Is Futile *edit*

Guess what? I don't come from a computer science background. Hell, up until 2 years ago, I thought I was going to be a Music/Motion Graphics dude. Yep, I was an artiste (an uber dork, but an artist none the less).

And one would have to be riding the short bus not to notice that most of the Flash Devs come from a similar background (notice I say Flash and not Flex, ahem). This blog post is directed at you guys, my fellow flash devs/UX dorks. You programming autodidacts (look it up mofo!) in the audience. So, if you come from a compSci background, go back to reading your white papers or writing your book on functional programming for AS3. You probably know all of this stuff.

Please understand the intention of this blog post: I'm just sharing things that weren't taught to me right off the bat. I was starting to feel a little behind the curve, and was wondering if I needed to go back to school or something. F that. Who needs school when you have blog posts and wiki/tutorials to read?

Check it yo. This is my list of things to learn by the end of the year, wanna follow me on the journey? It might be fun, nah, it'll probably suck, but you might be able to make some more money. Got your attention? Coolio. Let's get smert!

Intermediate level:

1. ANT. Learn it, love it, build it. (thanks FlashBum)
install ANT Flex Builder 3
do something with ANT

2. Command line blues. Afraid of the command line? Don't be! It's a powerful tool in the jedi's arsenal.

3. SVN, GitHub whatevs. Use one. Organizational skills are needed. If you are like me with everything on your desktop, learn organization. A clean mind is a razorsharp mind with teeth that can destroy major problems.

*3.14159 Learn Design Patterns. Here's a book to get you started: AS3. Like really really learn what MVC is. Because there is a difference between knowing MVC and KNOWING MVC. You'll know when you know it, because then a bright light from the heavens shines down upon you, and your eyes start to glow green. Seriously, look at my Twitter avatar.

4. Learn a real language. AS3 is rad, and it's my first language so I'll always have a special place for it in my cold dark heart, but it's very limited. If byteArrays throw you for a loop (ha, programmer joke! sigh, I know) learning C++ might help you with that. I don't know if I can recommend C++ to everyone, but try it, you might like it. There is a lot of power behind that language. Especially in this bad economy, multilingual == security.

*4.5 Learn Data Structures mofo! And algorithms if you dare.

Advanced level:

5. Study what's been open sourced by Adobe, like the Flex Compiler (java) and Tamarin (c++) the Actionscript Virtual Machine 2, or aka what makes AS3 run. By knowing what actually is going on under the hood will ultimately make you a much better programmer and/or bitter/insane. Then you'll start to understand what Joa Ebert has been talking about for the last year or so.

6. Embrace change, don't resist everything. I'm saying this as much for myself as for everyone else. Also try to think optimistically. Ha!

Jedi/Sith level:

7. Learn a Functional Programming language. I've been studying Erlang and F# a bit, which has allowed me to figure out the idea behind the XMPP protocol. I've also been told that Clojure is pretty awesometastic. This is the added bonus level though. Functional Programming is not easy at all, it's based on Lambda Calculus and it looks like it too. I've also heard that once you successfully complete a project in Erlang that not only do you get a free membership into Mensa, but you also learn the secret to space time and who shot JFK.

it's time to start the journey in 3, 2, 1. . .


Seantron said...

8. Get a good night's sleep before posting a blog.

nath said...

great post :) the only thing I'd add is never neglect architecture, and don't limit yourself to a single design pattern, often you need multiple to get the job done.

imho learn something learn c++, erlang and the opcodes for the vm you are targetting to get a grip of the actual code, then learn java and all its patterns + archs to get a grip on the overall application - then yeah knock yourself out by being a coding jedi or simply "pop" with too much knowledge.

ahhhhh one final - always remember that coding is incredibly simple, no single line of code will ever confuse you so rest assured that if you break thigs down enough you'll never be stuck and will always find a way :)

ps: i know i shouldn't read / reply since i come from the other side.. but hell you don't really classify the same as most "flash" devs now do you.. big difference between a few as2 actions and extending the avm ;)

nath / webr3

b. lee said...

Great list dude! I have a couple of other things that you will need to know to be well informed in the next 10 years:

- Get to know Apache, or the concept of servers in general.

- learn 2+ scripting languages (PHP, Python, Ruby)

- take a look at C, don't spend a bunch of time on it, but the learn C on the Mac helped me understand a bunch of under the hood stuff.

- take a look at jQuery, it is a good way start to get into learning functional programing

- there is a difference between Functional and Procedural

- my good friend Fred told me "Those that do not know LISP are doomed to rebuild it"

- learn about OAuth, and all the cool personal information federation stuff going on

- learn about PubSubHub - a great new way of doing "push" stuff.

- read about XMPP

learn about REST, it is becoming the norm for API's

also, stay up on your UI/UX design skills. no designer or developer is as helpful as someone that knows both.

thanks Sean!

Jorge said...

Probably too much for 2 years? To get the big picture you can learn as many languages as you can ... but usually is aparticular implementation of the same principles in different words. Face expressive challenges at work makes the other side (clients, deadlines, results) and if you could work while studying (be payed for studying) you get the best of the two worlds

Steven said...

I'm on board. It's tough for a self-taught coder in a CS world. To say it's esoteric is an understatement. Thanks for putting together this list.