Career Advice to the Void

If I were graduating high-school, or getting out of the service, or looking to change jobs, and assuming I still had a knack for programming in those scenarios, or the ability to pick up such a knack, I would probably dive straight into Kotlin/Java and Android development. If I listened to a future self. Or a parallel universe self.

Almost every other technical track requires multiple skills and additional knowledge. Web development needs at least HTML,¬†CSS and JavaScript but along with that: responsive design skills, graphics chops, change control nuances, various build and testing tools, sundry frameworks, browser compatibility issues, hosting and deployment options, etc. That’s without even getting into the backend database options, languages and apis.

iOS (iPhone) and Android are each very clean stacks with one tool, one language, one target. iOS used to be the ticket but Android is now (and for some time has been) the more lucrative market.

There is demand and infrastructure for work remotely for Android developers, and I would definitely target a digital nomad lifestyle for geographical independence. This tact is probably the easiest to break into from zero experience, the fastest skill to acquire and also has entrepreneurial leverage as you could not only work contract, but also make and market your own product.

The second contender…

If you don’t like programming, learn enough WordPress to make a landing page. Learn persuasive design and copy-writing. Learn how to manage a Facebook ad campaign and track results and then hookup with aliexpress, the amazon of drop shippers, and start pushing product with ads. Learn from your mistakes and successes and build until you’ve achieved a comfortable minimalist lifestyle with enough left over to invest for early retirement. Also geographically independent.

The third contender…

Possibly the riskiest but most exciting, would be to be a modern Edison, be a maker. Learn how to solder, how to work with micro controllers like the Arduino and Raspberry Pi, learn how to wire up sensors and servos to make intelligent things. It’s dirt easy and cheap for anyone to get started. Be able to build versatile interactions in the physical world, sentries, toys, simple robotics and automation, plant waterers, geo perimeters, security systems, drones.

Learn how to take a fun prototype all the way through fabrication. Borrow or save money to visit Shenzhen and make contacts and setup process. Take some of your prototypes there all the way through to production and setup an inventory on amazon for prime delivery. Push product via Facebook ads.

To take it to the next level: learn Blender and how to design things in 3D. Learn how to use services like shapeways to print your design in the physical and use these as casings and housings for your electronics, as parts for your drones. As art pieces, games and cool trinkets.

Last but not least contender…

A minimalist approach to web development using vanilla HTML, JavaScript, CSS, with the addition of PWA. This carries the ability to install web sites as apps while browsing. For both desktop and mobile.

With PWA you can leverage sophisticated media capabilities of HTML5, auto-updates, and piggy-back on the increasing access to local sensors on mobile devices and the full spectrum of services in the cloud. You can register and unlock paid content and capability with standard web payment systems giving you standalone applications that circumvent app stores, sprawling web deployments and infrastructure overhead.

There has never been a better time for the autodidactic entrepreneur.

Equations of Form

Some people like zoos or art exhibits, I like to explore abstract species of thought. Yesterday I spent the afternoon roaming around L-systems.

L-systems are little self-contained universes of alphabets, axioms, and rules. The alphabets are building blocks and may be any symbols or letters imaginable. The axiom is an initial combination of those letters and the rules change the axiom, morphing it into something else generation by generation. This simple trifecta creates an infinity of forms.

L-systems are deterministic and linear. This means given a certain starting point and a certain set of rules, they will always produce the same results. They don’t have the ability of chaotic systems to veer off in unexpected directions, although there may be ways of coaxing them to do so depending on how their results are interpreted. Part of their algorithmic DNA is recursion. A fractal reflexiveness that applies rules to the results of rules in an infinite spiral.

We can map L-systems graphically and they can produce intricate patterns with an affinity to the natural world: leaves, trees, clouds, terrain. But they don’t have to be interpreted graphically. They could be mapped to poetry, music, rhythm, dance.

Here’s the relevant Processing code that interpreted the L-system for the graphic above:

// Symbols: F+-[]
// Axiom: F
// Rules F->FF+[+F-F-F]-[-F+F+F]

var axiom = "F";
var sentence = axiom;
var rules = [];

rules.push({l:"F",r:"FF+[+F-F-F]-[-F+F+F]"});

// This is the entire l-system processor
function generate() {
  var newSentence = "";
  for (var i = 0; i < sentence.length; i++) {
    var ch = sentence.charAt(i);
    var nl = newSentence.length;
    for (var j = 0; j < rules.length; j++) {
      // look for one rune that matches this symbol, apply it and bail
  			if (ch == rules[j].l) { 
  				newSentence += rules[j].r;
  				break;
  			}
    }
    // if no rules matched, return symbol unchanged
    if (nl === newSentence.length) newSentence += ch; 
  }
  sentence = newSentence;
  console.log(sentence);
  interpret();
}


// Interpret l-system generated string using old logo method
// ...as if moving a turtle around to draw lines
var len = 60
var angle = 20

function interpret() {
  len *= 0.5;
  resetMatrix();
  translate(width/2, height);
  background(0);
  stroke(255,0,0);
  for (var i = 0; i < sentence.length; i++) {
    var ch = sentence.charAt(i);
    if (ch == "F") {
      line(0,0,0,-len);
      translate(0, -len);
    } else if (ch == "+") {
      rotate(radians(angle));
    } else if (ch == "-") {
      rotate(-radians(angle));
    } else if (ch == "[") {
      push();
    } else if (ch == "]") {
      pop();
    }
  }	
}

Inspiration for this came from Dan’s. always entertaining and educational, Coding Challenges; an even deeper dive can be found here.