Back on my programming project.

Learning this stuff is hard, but I suspect in a few weeks I'll be writing another post about how I now "get it".

Summary version:

This post starts with an explanation of all the programming languages I’ve learned over the years (and for those who care, they were: COBOL, BASIC, Fortran, IBM360, 6502, and Z-80 assembly language, APL, Pascal, C, Visual Basic, Delphi (Object Pascal for GUIs), SQL, JavaScript, and now Python.)
It goes on to explain how I’m finding Python, and especially Kivy, a different GUI (Graphical User Interface) library than I was using last fall, the hardest to learn, and then discusses why.
Its conclusion is that being almost 60 might make it harder, but what I’m learning is hard, and while it might be frustrating now, I’m pretty confident that I’ll “get it”, and it will be worth the effort.

Long version:

I started programming in 1977, in 10th grade, in COBOL. We learned to punch cards, and how data processing was done for the previous 80 years or so, with machines that sorted, collated, and counted values in specific fields of 80 column cards (when they weren’t chewing the cards to shreds). We did write some COBOL, maybe a total of 500 or so cards of it, which in COBOL is not a lot of code. But when testing your changes meant giving your card deck to the teacher so he can run it on the Honeywell (small mainframe) computer at the board of education offices and bring you back a printout the next day (of the next ONE error it found before giving up), it was a LOT of work!

My next language was BASIC, in 11th grade. We did that on a Wang mini-computer, not much more powerful than the Radio Shack TRS-80’s that had come out around then.  The entire class shared it so we had to sign up for time slots.  It was incredibly primitive by today’s standards, but it got me hooked.

In college, we did mostly Fortran programming, and some IBM 360/370 assembly language. I also took a class on APL – “A Programming Language” – which was an amazing experience. (I once wrote a “shortest path” graph traversal algorithm in seven lines of APL.)

In my senior year, once I had the computer my grandmother bought for me, I was able to work in Pascal (and after a few months, Turbo Pascal), the language that I learned to love and used most of my career.  In addition to IBM 370 assembly language, I learned 6502 assembly language in a class, and Z80 assembler on my own.

At DRB Systems, we experimented with the C language, and even wrote our first Customer Support Data Base (CSDB) using it, but we found C harder to use and the results much buggier than with Pascal. Later, I experimented with Visual Basic before we migrated to Delphi (with Object Pascal, a highly evolved version of that first $50 compiler I loved in college). Some people consider SQL to be a “programming language”, and I did a lot of that too, so I’ll at least list it here.

I also write a bit of JavaScript code, in a development tool called “ForwardPass”, on my “Pocket PC” phone (pre-Android and iPhone!)  I wrote a calculator, a spelling quiz program, and a little app to search databases of weight watcher style “points”, but I never did any web programming with it.

Since retiring, I’ve spent maybe 150 hours (last September and October) learning and working with Python and one of its GUI libraries, WxPython.  I got far enough to understand the correct ways to do some of the things I’d gotten to “sort of work”, and also realized I needed a GUI library that can handle multi-touch (and run on Android, not just Windows) and WxPython was the wrong tool for that job.

Well, It’s been six months, and I’m finally working on my Python project again. And, I’m finding that at age 58, I’m not as efficient at learning this stuff as I was 20-30 years ago.

I remember learning Microsoft’s Visual Basic 3 back around 1995. I spent maybe a month with it, and wrote a program called “MessageBoard” that DRB Systems used (a rewritten in Delphi version of) for decades (and for all I know, might still be using.)  That’s all it took to understand enough of its capabilities to do something useful with it, but also understand enough of its limitations to reject it for our SiteWatch product.

This time, the learning curve feels a lot steeper. If I’m counting right, Python is my 12th language (13th if you count SQL), and although the basics came easily enough, I’m finding this language learning process to be the most difficult. I don’t remember a lot of what I learned last fall and need to re-learn it. I know I will pick it back up faster this time, but it also feels like I’m starting over.  I’m also finding Kivy (this new GUI (Graphical User Interface) library I’m learning) to be more frustrating than WxPython was, That wasn’t trivial either, but the way it worked was at least familiar and similar to Delphi. Kivy is very different.

So if I’m looking for reasons that this is harder (other than “brain slowing down”), I can cite a few.

If this were my full-time 40+hr/week job, I’d have spent 150 hours on it in the first month, and not have put it down for six months to do 50 other things. I don’t have the focus I used to have, but that’s because I don’t have a job that requires me to focus on just specific things.  I suspect I’d have forgotten a lot of it after six months even when I was 30, and I’d have found Kivy easier if I’d gotten to it last November when Python and Wx were fresher in my mind.

I’m also learning Python, not Visual Basic 3.0 or Turbo Pascal 1.0. Turbo Pascal’s manual was a 300 page paperback book that documented all of it pretty well. (It was a compiler AND editor in 28 kilobytes. It didn’t have a very rich library.)  Python’s “Tutorial” alone prints out to way more than that, and the library reference is many times larger. There’s a lot to learn.

There’s a lot to learn with Kivy too. I find some of it brilliant and if I can just figure it out, I think it has huge potential. And I know I can figure it out – there are thousands of people who have used it successfully, and I learned Wx quickly and well enough to write my keyboard designer app in it. This is just more of the same kind of work. But it’s a LOT more.

A problem with open source software is that there aren’t many volunteers wanting to write documentation. Projects have to grow user bases large enough to justify that, and that takes time. Kivy’s a younger project with fewer users, and its docs aren’t very good as WxPython’s. And neither is anywhere near as good as Delphi’s documentation was (especially in the early days.) But Delphi’s writers were doing it full time as their job (and working directly with the full-time programmers).

And it did take time to learn to use Delphi effectively. The easy stuff (using their pre-built components) was easy, and the great documentation made it easy to learn. But the more complex stuff (making your own components) was still hard – you just didn’t need to use that part. And GUI programming is very different from console (80×25 character text) programming, and I had to learn that part at the same time.

Well,  the “material design” style GUI programming in Kivy, is also very different from Windows style GUI programming (whether in VB, or Delphi, or Python with Wx). Not as different as DOS vs Windows, but far more different than Delphi’s VCL (Visual Component Library) compared to Python’s Wx library.

So yes, learning this stuff is hard, and maybe being almost 60 makes it a little harder. But there’s also a lot more of it to learn, and the weaker documentation makes it harder to find what I need to know, so I have to expect it to be harder. But I also suspect that in a few weeks I’ll be writing another post about how cool Kivy is now that I “get it” and maybe talking about figuring out how to get my app running on my android tablet and phone. 😊

We’ll see. I’m pretty sure I’ve still got this!

Leave a Reply

Related Posts