Monday, August 22, 2011

Do Programming Language Skills Exist?


I don't have Python skills. It's true I have programming experience where I've heavily used Python for the past couple of years.  Still, I have a hard time seeing Python as a skill. In fact, I have a hard time believing any of my programming language skills are real.

Making the Case
Programming skills may exist may exist but programming language skills do not.   Let's consider the differences.


SkillsNot Skills

  • Object-oriented
  • Functional
  • Imperative

  • Java
  • Haskell
  • Python


Let's pick on Java.  Java is a tool, not a skill. Real skills are working with concepts like inheritance, compile time type checking, branching, looping and more. None of these concepts are unique to any one language. Understanding that makes picking up new programming languages a breeze.

Does knowledge of standard libraries on a language platform count? Not really. It means you're good at learning libraries. It says nothing about your programming skills. You could spend years working with different Javascript libraries without understanding what a closure is for example.

Don't Limit Yourself
The idea of a language as a skill limits you as a developer.  For one, it limits your thinking to the features your language supports.  Even worse, it puts too much faith in what that your language can do. Stop doing that. Start putting more faith in what YOU can do as a programmer beyond the language. You'll be a better developer for it.

Sunday, August 14, 2011

Script Tweaks and the Return of Falling Blocks


Last week was awesome. Lots of cool stuff got done with web apps, Blender development, and a touch of Java. Let's get right to it, shall we?

Game PD: JSON and Updating the Updater
A couple of unused columns got dropped out of Game PD's database. This required a little bit of SQL and a couple of small changes to the updater script. Brand new decorators now do some argument checking against data class methods. It was great. Decorators are a fun Python feature to revisit. There's a handy tutorial that helped me relearn the weird bits.  This exercise also turns out to be a nice way to practice writing secure code.

On the web app side of things, Game PD's front end completed the switch from a table to div layout. The data feed stopped passing PHP arrays and started passing in JSON data. This will send the old game table template into retirement. Furthermore, it mostly dialed back PHP's role to that of a data provider. The layout still needs work but it's nothing that can't be resolved with some CSS tweaks.

Blender Addons: Ani-Mangler and Materials
Ani-mangler got a small update. It now offers a convenient way to name shape keys as they're made. You now can generate shape keys auto-named “subtle” for small deformations or “violent” if you decide to really crank the settings on it.

In other Blender news, API options for messing with materials caught my attention. The devs made it easy to climb the learning curve but I'm not ready to put out anything yet.  Hopefully, there will be more on that next week.

Java: Falling Blocks Comes to Github
Falling Blocks is a Tetris clone I wrote some years ago as support material for a professor's game programming class. It was the third of three games that showed how easy it can be to develop games in Java. Aside from sound issues, it still runs pretty well. It's now available to you via my Github account. It's a proud part of my history and I hope you like it.

Conclusions
It was a busy and productive week but there is still much to do on all fronts. As always, I'll keep you readers posted on new developments.

Sunday, August 7, 2011

Everything But The Blender


Weeks that include interviews mean less work on projects. This was especially true last week where the interview was with a New York City startup. Just the same, there are a few interesting things worth talking about.

Apache Configuration
For the longest time, Blender Addons and Game PD shared a common folder which made version control difficult. Now, both projects have their own folders. Setup meant making separate sites-available files and writing a BASH script to automate Apache reloads.  Once done, switching between web site projects became a simple one-line command.

Python Is Awesome
I like doing small experiments in Python enough to write up quick scripts here and there for fun. One project used operating system utilities to examine different aspects of my /etc/ directory. Another project on the topic of continuations taught me a functional programming trick for passing in what courses of action the target function should take next. Give “python continuations” a Google search. You'll be glad you did.

Learning continuations got me thinking about the relationship between programming languages and paradigms. With Java, I felt pushed to think in object-oriented terms. Haskell is a functional programming language and, as such, pushes that style of development.

Python never made me feel pressured to adopt one style over another. I learned its style of classes and inheritance when I was ready for it and picked up functional programming tricks when I decided it was time for that. To pull that off while keeping the language simple is impressive.

PHP with Cookies, Sessions, and JSON
I finished a session and cookie manager that I did for myself as a challenge and came away from it pretty satisfied. This project mattered because sessions were the only major web programming area from my JSP days that I didn't have a handle on in PHP. It was a big win. There is still a lot to be learned though.

Take JSON for example.  I just finished off some work on a project where I was feeding JSON data from the server to client-side Javascript. Parsing it via JQuery was a little weird at first but, overall, it wasn't a difficult learning curve. Compared to XML parsing, JSON is easy.

In Conclusion 
After all is said and done, only Blender scripting fell to the wayside. That's something I hope to remedy during the coming week.  I look forward to talking about that and more in the near future. 

Sunday, July 31, 2011

Div Tags, Nodes, and Gentrification


Accomplishments are light compared to the week prior to this last one. Most weeks would in comparison. Job hunting distractions hit hard which meant fielding phone calls, writing emails, and doing research for interviews. The trade-off is it helps get me employed but takes away from project time. So here's what's happening.

Game PD – Div Research
The Game PD project's reliance on html tables for layout is embarrassing. To work towards fixing that problem, I experimented with organizing image files using css and div tags. It's a different way to manage things but I can see the degree of flexibility gained from doing it this way. The next step is to fix the tags in Game PD itself.

JMonkey – Node Experiement
This past week's JMonkey topic was the node system. JMonkey nodes are a little like css/div layout in that they help organize visual entities presented to the user. For my experiment, I took liberties with an existing tutorial on the topic. I gained experience in node set up, rotation, and scaling using the api. Aside from a snag with property settings, it went pretty well.

Blender Addons – Gentrification
A visit to New York City lead to research on gentrification, a topic that matters to Blender Addons. Gentrification refers to affluent people moving to poor neighborhoods and improving them. This causes the underclass to either adjust or move out because it becomes more expensive to live there. Some of the underclasses most affected are poor minorities and artists. This likely includes many 3D artists as well.  So gentrification serves as yet one more reminder that my audience is one of modest means.

This matters because I view Blender Addons as a business and the first rule of any business is to make a profit.  That means that the choice of target audience has consequences that cannot be ignored. I'll think this over carefully before making any decisions.

Conclusions
That's all for now. Aside from interviews, there's plenty of interesting work yet to be done. I'll keep you posted when I have new things to share. Cheers.

Tuesday, July 26, 2011

Blender Ops, MVC, and More Monkeys


I got a lot done last week. I'll do my best to keep this blog entry short. Let's get to the week in review.

Blender Addons - Blender Operators and CMS
String It got a point upgrade. It now has hook support so that the objects that the generated curve runs through actually attach to the objects themselves. Also, demo videos for this and my other scripts got posted to Youtube this past week. As an extra challenge, I wrote an operator that syncs rotation of multiple selected objects. This last script gave me good practice on modal ops but it probably won't make it to the site.

As Blender Addons grows, a cms system becomes more appealing. This and my web hosts support for it justified a local Joomla installation. However, it'll be awhile before a CMS switchover actually happens. Design issues need to be addressed first and it's not a trivial task. In the long run, it'll be worth it because the tools for managing and organizing content are pretty useful.

Game PD – MVC and the Javascript Bug Hunt
After spending time reviewing advanced PHP concepts, it became apparent that MVC style code layout could be done easily in Game PD. In Java web applications, it's pretty obvious what belongs in a data class, a controller servlet, and a JSP page. However, with the right amount of discipline and a few well placed require statements, you can have the same benefit in a PHP project too. This project now has the advantage of MVC style organization with none of the XML hassle.

A Javascript bug in the project taught me an important lesson about functional programming. Page navigation died when page reloads happened. The root cause turned out to be a function being accidentally passed to another function rather than it's result. It was a good debugging challenge and it served as a cautionary lesson about the kinds of traps you can fall into with this style of programming if you aren't careful.

JMonkey – The Red Ball
My latest baby step back into Java was a JMonkey project where I rewrote some code to turn a blue cube into a red sphere. What struck me as interesting was it felt like familiar territory already covered in tutorials I did on Python development for Blender. It was pretty easy stuff so I have to give credit where it's due. JMonkey, so far, is pretty friendly to newcomers.

In Summing Up
So between Blender Addons, Game PD, and JMonkey, my development endeavors have effectively evolved into a 3 projects. A lot got done and there's a lot more coming down the pipe. My backlog, as it stands, has 8 serious items to tackle and it's time to get to it. I look forward to sharing more next week.

Sunday, July 17, 2011

A Cookie, A Monkey, And A Linked List


Blender Addons has a ways to prove itself. Five add-ons is a good start but there's still much to do. Here's what's been happening.

Particle Tracer
Particle Tracer is an add-on I wrote that uses particle locations to create curves. The order and/or chaos in the end result reflects the intention or degree of skill the user has when configuring a particle system. It's a good script for creating simple curves that look like flailing noodles or something fancier if that's what's desired.

JMonkey Investigation
JMonkey is a compromise. When I code unpaid and open source, it's computer graphics and Python and PHP are the right fit for what I do.  However, I'm also looking for paid work.  When tech recruiters say they want Java and .NET, they mean it.  The idea of accepting programmers from other languages doesn't fly. Since JMonkey is both Java-based and generally known and respected in the open source graphics community, I went with it.

My first impression is it's good. You can get a Netbeans based environment with all the libraries you need to start. The “Hello World” it gives you for a default project comes with a 3D cube you can interact with. Judging by the demo videos, it has a lot of good capabilities. There might be future projects in this.

Linked List Challenge
A famous interview question asks “How would you write a function to iterate backwards through a singly linked list in C?”. Most interviewees from entry-level to kernel hackers get it wrong and get eliminated for it. I wonder if they should.

The first thing I take issue with is the candidate is asked to do it in C. Most people's programming background is pretty high-level which would make C seem pretty intimidating.  Candidates should be focused on the problem without being distracted by the syntax of the language and C often makes that task needlessly more difficult.  Candidates should be allowed to use either pseudo-code or their comfort language to tackle these sorts of questions.

I wrote a Python function to solve the problem in 10 minutes which brings up the second issue I have with it. It's easy to solve the problem if you can think recursively. Recursive thinking comes easy if you do a lot of functional programming.  I use that kind of thinking frequently in the Python and Javascript code I write.  

However, I suspect most good enterprise and business developers manage just fine without functional or recursive thinking in their daily work.  It doesn't apply in every situation.  Most of the time, it doesn't even apply in the context of the job the candidate is interviewing for.

Cookie Setting in Uncle Squirrely
I decided I wanted Uncle Squirrely to remember what game ordering and platform they were last on when they left the app and came back later. It was a good excuse to get into cookies.

I had the cookie setting happen on the server side. I let a JQuery plugin handle the job of reading cookies and turning the data into a GET request. This meant the server-side didn't have to worry about how the data was coming in. It was a pretty simple yet interesting experiment overall.

And That's It
Another satisfying week done. I'm looking forward to the next one and you'll hear from me again soon. Cheers to all.

Monday, July 11, 2011

Junior/Mid-Level and Independent

The other day, a guy called to talk about a PHP developer position for an e-commerce site in Washington state. Washington is friendly territory for Amazon affiliates which makes it very appealing just on account of my own web sites. Having a solid background in PHP with no financial incentives certainly doesn't hurt as credibility goes. The qualifications matched beautifully. With a list made up of PHP, Javascript, CSS, SQL, and HTML, it would be difficult to be a more perfect match to my own skill set.

The only warning sign was getting an email before the official phone screen that the position required 5 years of PHP experience. Now experience is a funny duck. Any developer whose history is even remotely interesting will not spend 5 years working with one core language for all projects. My own experience was a delicious sandwich of server and client side technologies for all kinds of projects. Since PHP was what I started and ended with, you could call that language the bread I guess.

Here is something I find interesting. Back in college, a 3D site called I.L.B. Productions was my first personal web project which I did in PHP.  Fast forward to present day and you have Uncle Squirrely and Blender Python Tutorials which were my other two. Very little money was made on any of these projects but much fun was had. However, when it came down to the REAL phone screen, the woman I spoke with was not impressed enough with this or any of my non-PHP work to give me much consideration for the job. Experience with large scale e-commerce projects was a biggie and they wanted someone senior level for it.

Now there is a general rule that "senior developer" and "5+ years experience" of paid experience go hand-in-hand. My caliber is absolutely junior to mid so being judged as under-qualified for a "senior" role is fair. Part of the issue was because it was largely expected to be remote work and the client likes their junior and mid-level people to be physically there. So while relocation at this point in the job search is absolutely back on the table, senior is senior and there is no getting around that.

The "senior" vs. "junior" problem is interesting as job hunting goes. Dice.com searches show Connecticut has 26 senior developer job openings for every 1 junior position. The root cause of this situation is subject for debate. Still, this makes a layoff in the 2 to 5 year experience zone look like absolute death to such developers.

These are the challenges I face in the search for paid work. It's neither good nor bad but it is reality. So why on Earth do I still bang out code and throw that stuff out on the Internet if the odds are against me? Well, it's just plain fun. As for the job search itself, I like to quote Han Solo in Empire Strikes Back when he says...

"Never tell me the odds."