Thursday, July 1, 2010

To Script, or Not To Script

It seems to happen all of the time. One of those situations arise where you have a task to accomplish that you know will be simple as pie to script. There's a big smile on your face as you finish writing it, nod approvingly at it's beauty and let it run it's course. Relaxing back into your seat, you bask in the glory of having once again thwarted destinies vain attempts to make you work.

But, this was one of those not-so-rare occasions where the task at hand would have taken you only a few minutes longer, or in some cases less time to accomplish than writing the code to make it work. You were torn for a moment, "Should I just do it? I'll never have to do this ever again and scripting it will take just as long as doing it manually". To script, or not to script?

If you're reading this blog, you're most likely in the demographic that would answer that question easily. Script it! Even though this is a specific case and the actual code will most likely never get used again verbatim, you still gain a lot from scripting tasks like this. Here is why:

Within every task given us is a problem to solve. Some are easier than others, some are difficult, and some may not seem like problems at all. The fact is though that as simple or as direct as a task may seem there is always some level of problem solving involved with it and as it is with any other skill, practice and repetition always make you better. If you approach every task like a challenge and use it to level up in some way, it makes even the simplest script worth writing!

What can you do to make a simple, easy-to-write script more challenging? Some ideas:
  • Write it in another language or application
  • Use commands or functions you've never used before
  • Make it more robust, so that is becomes useful in other situations
  • Write it in as few lines of code as possible (don't count comments or white space lines)
All of these things will definitely make you better and are usually fun. As long as your skills are improving, you're getting more benefit from scripting a simple one-off task then if you were to just do it manually. Your gaining skills, experience, challenging yourself, and inevitably getting better so that you'll be more apt to tackle a difficult assignment when it comes knocking.

In our line of work, the ones who stop learning are the ones that are left behind. Always seek out new ways to improve your skill-set and keep getting better!


  1. In your line of work I suppose it is irrelevant, but for web-based coding it's a much harder decision and you need to take into account various factors like CPU, filesize, etc. For example, should I hard code some php functionality into a page or should I make a class to organize it all? A class = more RAM used and a bit more processing, but it's cleaner code and much more reusable. On the other hand maybe I'd rather keep it as client-side as possible and utilize javascript with ajax calls only when I need them and spare my server as much load as possible - but the next thing you know you have a 200k js file (cacheable of course) that you would only ever want to implement into a site with a high percentage of repeat visitors. One-time visitors on a slow connection like a 3g phone will hate you.

    So, yea I remember you saying for Maya that the cpu/ram/etc aren't even factors in scripting, but for other languages/applications it's definitely something to consider.


  2. It's not that hardware isn't a factor, because really all the scripts are doing is performing a task or job within the application. If that particular job uses a lot of resources (i.e. rendering) than the script will use the same amount of CPU/RAM as if you were to run it manually.

    Interesting points though about web-dev vs. CG-scripting. I suppose the difference would be that the type of 'small task scripts' I'm referring to above are largely not going to be used by anyone but the author, so we don't have to worry about user-feedback. An example of a web-task like this might be something like backing up your server in a special way to prepare for moving it to a new box or something like that. Stuff you're not going to repeat often, if at all, and could be done manually using web-tools, but is all scriptable if you have the know-how.

  3. Ah i like your analogy about the server backup - yea that definitely makes sense now, and I agree, script it :) My #1 reason for scripting it would be that I fear the manual job would be a pain in the ass and scripting it sort of gives me that reassurance like "script it only once and it'll be there to save your ass in 2 years when you forget how to back up your server cuz you never do it"

    My one argument (to play devil's advocate) is that my scripting ability/style changes/improves constantly so something I script now for a rare job I will probably laugh at and re-code anyway in 2 years so in the end it's all just practice.

  4. That's another good point too, haha. Or, even if you don't want to do it a "better" way you'd probably end up re-scripting it differently anyway just to make it interesting.


Scripting Topics

MEL (41) Maya (39) Scripting (32) Scripts (21) programming (14) Free Mel Scripts (8) MaxScript (7) Coding (6) Rigging (5) tutorial (5) 3ds Max (4) Python (4) Tricks (4) faceware (4) image metrics (4) Learn (3) Namespace (3) Namespacing (3) animation (3) facial (3) webinar (3) Code (2) GDC (2) Game Developers Conference (2) Multiple Namespaces (2) Print Selected Objects (2) Recursive (2) Removing Namespace (2) Return (2) Set Driven Keys (2) TOkenize (2) Tips (2) Toggle Background Color with MEL (2) animation tools (2) animators resource (2) deformers (2) learning (2) maya tools (2) mesh (2) modeling (2) nodes (2) procedure (2) script swell (2) transforms (2) Animschool (1) Attribute (1) Background Color (1) Beer (1) Blur (1) Character Setup (1) Check if an object exists (1) Class (1) Command Line (1) Constraints (1) Create SDK (1) Create a directory with mel (1) Data (1) Export (1) FilterString (1) Fix (1) Floating Slider Time (1) Functions (1) Get Maya Version MEL (1) Get Parent (1) Google (1) Holiday (1) How To Write To A Text File (1) Import (1) Incremental Save (1) Index (1) Joint Chain (1) Make Set Driven Keys (1) Maya Version (1) Modules (1) Objects (1) Orient Constraint (1) PYMEL (1) Parent (1) Parent Constraint (1) Point Constraint (1) Position (1) Print (1) Print Current Selection (1) Print Random Quotes (1) Print Selection (1) Print Vertices (1) Progress Bar (1) Progress Window (1) PyQT (1) Removing Spaces From Names (1) Scene File Name (1) Select Connections (1) Select Outgoing Nodes (1) Split Bones (1) Split Joints (1) St. Patrick's Day (1) String Array (1) System (1) Transfer UVs (1) Viewport (1) White Space (1) Windows Username (1) Zero Out Attributes (1) animButtonState (1) arrays (1) articles (1) auto key (1) better (1) blendshapes (1) break (1) confirm dialog (1) continue (1) convention (1) e3 (1) efficiency (1) error (1) eval (1) executable (1) fclose (1) fopen (1) fprint (1) games (1) improving (1) infinite loop (1) joints (1) listHistory (1) listRelatives (1) logic (1) loops (1) milestone (1) nodeType (1) objExists (1) recursion (1) rotates (1) rotations (1) schools (1) sculpting (1) setAttr (1) shout outs (1) source (1) source a script with a variable (1) speed (1) (1) translates (1) video (1) warning (1) world matrix (1) worldMatrix (1)
Script Swell - Blogged