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.