Sunday, October 13, 2013

The Purpose of this Blog

If your child is interested in computer programming, I have started this blog to assist you.  This is why there are some articles on which is the best first language for a beginner.  The slant is for beginners, but there is some information for programmers in general.

I will also share items of interest related to software.

Robert

Self Documenting Code and Ecclesiastes

In a previous article, Cost of Software Maintenance, I denigrated self-documenting code.  Because so many people believe in it, I should discuss it further.

Code changes, but documentation is usually not updated to keep pace with the code changes.  Documentation becomes increasingly outdated.  This is one reason given for skipping documentation.  Another reason is the lack of time or money when first writing the code.  Limited resources is a legitimate reason to minimize documentation.  Many believe that time-to-market is so important that documentation must be sacrificed.  Frankly, many programmers have trouble writing.  You do not see many English majors coding software.

Alexis Ohanian said in Without Their Permission that he and his partner worked day and night for a month to create a website that was "only slightly embarrassing."   He also said, "...if you are not a little embarrassed by what you launched, you waited too long.  It need only be good enough to be useful" (page 62).  He is not alone in saying this.  I remember hearing the president of Rogue Wave saying at a conference that if you spend too much time adding quality to your product, you will lose market share to a company that can get a less refined product out to market more quickly and take the market.

On the other hand, Crossing the Chasm by Geoffrey A. Moore describes the problem companies have of breaking out of the early-adopter ghetto.  When your product barely works and customers want a solid product, your growth is blocked.  Early adopters want the latest technology and they are willing to wait for quality to improve.  Lack of documentation can make it impossible to improve the product and expand your market share.  I saw one company try to out-source documentation of existing software to a company in Albania because the foreign programmers were cheaper.  It did not work.  Company growth was stymied because new staff took too long to decode the code and the outsourcing of documentation failed.

If use of self-documenting code will solve the documentation problem, then that would be great.  But what is self-documenting code?  The best approach is to use a documentation generator that creates HTML documentation from properly formatted comments.  Javadoc for Java and Pydoc for Python are examples.  The worst approach is number one on this list:  using meaningful names for variables and functions.  Meaningful names, with no comments, is very cheapest form of self-documenting code.  The following section explains how this breaks down.

Ecclesiastes

The book of Ecclesiastes says in 1:15, "What is twisted cannot be straightened; what is lacking cannot be counted."  The problem with meaningful names is that a number of programmers suffer from twisted logic and a faulty-world view.  Let me give you a real example, altered to protect the identities of those involved.

I was asked to modify Product X to issue new commands to hardware devices.  Only one device at a time was turned on and I needed to tell the code to find which device was turned on and then command it.  I found an undocumented function named getActiveDevice.  After I modified the code I went to the customer site to test it against the real devices.  The code changes did not work because the undocumented function getActiveDevice did not keep track of which device was  turned on (my interpretation of Active), but it kept track of which device had a display visible on the GUI.  (The GUI changed the devices that were visible depending on which tab was selected.)  The function should have been named getVisibleDevice.  The world-view of the previous programmer was not a view of the customer product, but a view of the programmer's GUI code.  The real world was not used as a point of reference by the previous programmer, so the variable names and function names were divorced from reality and were less than useless.

You cannot count on variable names or function names to tell you what is going on in the code if the coder used twisted logic or a faulty-world view.  If there is no documentation, and the code has no comments, and when you object you are told that the code is self-documenting, then they are "shining you on."  Documentation generators like Javadoc or Pydoc require comments.  If self-documented code is done properly,  there are meaningful comments in the code that document generators turn into HTML documents.  You cannot count on meaningful names alone to document the code.

Robert

Saturday, October 12, 2013

Cost of Software Maintenance

Software maintenance is the dirty laundry of programming.  Every programmer wants to write code.  No one wants the mundane task of maintaining code.  But if a product is going to survive in the market place, it must be used for an extended period of time and eventually need maintenance.  Software maintenance includes expanding the functionality of a system to meet new requirements, so maintenance is more than fixing defects.

Changing a software system takes time, which costs money.  Frequently, the staff making the changes was not present during the creation of the product, so changes are made by people with no knowledge of the system.  Saying code is self-documenting is good for a laugh among mature programmers.  (The difference between an experienced programmer and a mature programmer is that a mature programmer has learned from experience.  It is astounding how many experienced programmers make amateurish mistakes because they have never learned from their experiences.)  Lack of documentation is one of many factors that increase the cost of maintenance.

Canright's Costs of Software Maintenance
  1. Assume a basic quantum of maintenance cost, Q.
  2. If no documentation, add Q.
  3. If code is riddled with poor logic, add Q.
  4. If the project lacks debugging tools or features, add Q.
  5. If the code has no error handling, add Q.
  6. If good programming practices (for maintainability) are omitted, add Q.
Here is Canright's Law of Software Maintenance Cost:  If code with the best maintainability costs Q hours or dollars for a software maintenance task, then code with the worst maintainability costs six times as much for the same maintenance task.

The Wages of Sin is Death

Code with poor maintainability features, after suffering many modifications by a changing parade of programmers, will turn into a Big Ball of Mud.  You might want to read the original article: http://www.laputan.org/mud/.  You might enjoy hearing a lecture on the topic (66 minutes) on YouTube: http://www.youtube.com/watch?v=h6Y9aJhqO78 by the author, Brian Foote.  This video lasts an hour and it is worth your time.

If you enjoyed reading Thomas Pynchon's Gravity's Rainbow , William Faulkner's Absalom, Absalom! or James Joyce's Ulysses (three illogical, hard to read books), then you might enjoy software maintenance on a Big Ball of Mud.  But most programmers suffer frustration when working on projects with hard to read code.  At this point maintenance can break down.

The ultimate cost of unmaintainable software is the death of the software product.  If you do not have replacement products, you can lose your customers and go out of business.

If you have developed a product that is so fragile, twisted, and unmaintainable that it is sure to die, then you need to unload it.  You need to sell it to an unwise investor before the product implodes.  Did you notice how many dot com acquisitions disappeared?

 Robert

PS:  I will elaborate on unloading your start up.  Consider Douglas Crockford, the inventor of the JSON data format and founder of Electric Communities. Hundreds of millions of dollars were invested in this company.  He sold out.  Eventually the company went bankrupt and was sold for peanuts.  He got out in time.  You do not want to be the owner when  the start up goes bankrupt!

List of Related Articles
Software Maintenance and Variables  March 16, 2014
Software Maintenance and Message IDs  April 2, 2014
Unique Method Names for SW Maintainability  August 26, 2017
Avoid Bit Fields  October 1, 2017

Saturday, July 20, 2013

Python, Best Language for Beginners

 Basic is a great language for teaching programming.  The BASIC programming language was created at Dartmouth College as a vehicle for teaching programming to beginners.  But when I look at projects at the GitHub website, you will see that Python is on the list of most popular languages, but Basic is not:  https://github.com/languages

Based on features, Python is a good first language.  Its style of coding is closer to that of Java than to C/C++, but it permits procedural programming while Java is strictly object oriented.  Python's popularity together with its other strengths make it the best language for beginners.

I had previously recommended Basic as the best first language for beginners.  How can you go wrong with Basic?  Only if Python provides more practical opportunities.  Kirk McDonald, president of PubMatic, an ad tech company in Manhatten, wrote an Op-Ed piece in the Wall Street Journal, May 10, 2013, titled, "Sorry College Grads, I Probably Won't Hire You."  I'll quote him:  "...please learn a little computer programming."  He also said, "Dabble in a bit of Python."  So the president of a tech company recommends Python, not Basic.  (You can google the title and read the article online.)

I had previously recommended Python Programming for the Absolute Beginner by Michael Dawson.  I continue to recommend it for beginners.  You can go to the publisher's website and download the version of Python that is compatible with Python modules called Livewires and Pygame, which come with the Python installer used by the book.  You can also download the source code from the book.  This book is an excellent resource for the beginning programmer.

Robert

Here is an article with more explanation of why people like Python:
http://www.mihneadb.net/post/python-the-best-first-programming-language/ 

Here is another article saying Python is the best language for beginning programmers:
"Python squeezes out JavaScript, C as best starter programming language", January 23, 2014
http://www.itworld.com/application-management/401419/python-squeezes-out-javascript-c-best-starter-programming-language
Surprisingly, the C programming language was 2nd on the survey. I last mentioned C a a beginning language on April 13, 2013:
http://canrightonsoftwareandprogramming.blogspot.com/2013/04/the-c-programming-language.html

Additional blog posts:
Python GUIs with PyGTK and Glade  February 26, 2014

July 9, 2014
"At the time of writing (July 2014), Python is currently the most popular language for teaching introductory computer science courses at top-ranked U.S. departments.
Specifically, eight of the top 10 CS departments (80%), and 27 of the top 39 (69%), teach Python in introductory CS0 or CS1 courses." This quote is from the following blog:
http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-us-universities/fulltext


Sunday, June 30, 2013

Instructions for installing PyDev

Here are instructions for installing PyDev into the Eclipse IDE.  This a link to a detailed set of instructions that include the installation of the Eclipse IDE, followed by the installation of the PyDev plug-in.  This is a 35 page document.  The Chrome web browser will open it, eventually.  Mozilla might have trouble opening it (my copy of Mozilla proclaimed the file was damaged, but it was not).  Microsoft Internet Explorer will eventually open the PDF file.  It takes time because the file is large.

PyDev was developed by a company called Aptana.  They have an IDE called Aptana Studio 3 that comes with Python loaded in it.  This is another version of the Eclipse IDE.  It will work just like Eclipse, if you are familiar with it.  You do not need to add the PyDev perspective in Aptana Studio 3. The Web perspective will run Python code just fine.  You do need to setup the Python interpreter.  Refer to the instructions for installing Pydev to see how that is done.  See the section, Configuring the IDE, pages 14 to 18.

IDE's are helpful for debugging code.  It is great that you can use Eclipse with Python.

Robert

Friday, June 28, 2013

Dia - Simple and Free UML Drawing Tool

I mentioned ArgoUML in an earlier post.  Now I'll mention Dia for UML diagrams.  ArgoUML can generate code from the UML models.  Tool Dia was inspired by Visio.  Dia cannot generate code, but it is very easy to use.  Its homepage is:
https://wiki.gnome.org/Dia

The Windows installer for Dia can be found here:
http://dia-installer.de/

Here is an example of a sequence diagram drawn with Dia, which calls them lifelines.


You can see the diagram is more sophisticated than what you would draw with PowerPoint.  There is a drop-box in Dia where you select UML diagrams.

It is important to document your designs.  You export your Dia diagram to a picture file in order to paste it into documents.  I found Gimp useful for cropping pictures exported from ArgoUML.  In Dia I draw a simple box, put my diagram inside the box, and the export to jpeg automatically crops the picture around the box I drew.  That makes it easier than ArgoUML for making jpegs to paste into documentation.

Robert

Posts elsewhere about using Dia for UML:
UML Sequence Diagram in Dia?
http://stackoverflow.com/questions/3535717/uml-sequence-diagram-in-dia

How to lengthen lifeline of sequence diagram in Dia?
http://stackoverflow.com/questions/9955587/how-to-lengthen-lifeline-of-sequence-diagram-in-dia

Post about ArgoUML:
http://canrightonsoftwareandprogramming.blogspot.com/2013/06/argouml-free-uml-drawing-tool.html


Saturday, June 22, 2013

ArgoUML - Free UML Drawing Tool

UML diagrams are vital for documenting code.  I have used and I recommend the free diagramming tool called ArgoUML.  I have used ArgoUML 0.34 for Windows.  You can download it from here:
http://argouml.tigris.org/

ArgoUML does more than create diagrams for documentation.  You have to export your diagram to a picture file to have pictures for documentation.  Then you might have to crop your image.  I use Gimp to crop pictures.. ArgoUML can generate code from your diagrams.  It supports code generation for these programming languages: C++, C#, Java, PHP4, PHP5.


For large projects, or for professional projects, I recommend buying Sparx Systems Enterprise Architect.  The last time I looked it was $135 for an individual license.  Sparx Systems Enterprise Architect will generate C++ code for you from the class diagrams, which pays you back for the effort of creating detailed documentation.  I have used this at a customer site and was very impressed.  I highly recommend this professional tool.

Here is their website:
http://www.sparxsystems.com.au/
They are an Australian company.

Robert

Cppcheck - Free Static Code Analysis for C and C++

Cppcheck is a free static code analysis tool for the C and C++ programming languages.  It is integrated with the Code Blocks IDE.  I like the Code Blocks IDE and this is one more reason for liking it.

You can download Cppcheck for free from SourceForge:
http://cppcheck.sourceforge.net/

Cppcheck can help you find potential null pointers.  You must be careful with memory creation and destruction in C/C++.  I highly recommend static code analysis to look for null pointers.  I have used Cppcheck.  I recommend it.

Robert

SourceMonitor - Freeware for Code Review

SourceMonitor is a free software tool for code complexity analysis.  It will give you a line count for your project and provides complexity analysis.  I have tried it and found it interesting.  It is free, but you have an opportunity to donate payment to the author.

Here is a link to its website:
http://www.campwoodsw.com/sourcemonitor.html

Its website says SourceMonitor measures metrics for source code written in C++, C, C#, VB.NET, Java, Delphi, Visual Basic (VB6) or HTML, including method and function level metrics.

Complexity analysis can pin-point sections of code that are overly complex.  Code that is overly complex might be more likely to contain logical errors.  Overly complex code is also harder to maintain.

Robert

Saturday, April 13, 2013

The C Programming Language

Should a beginning programmer learn the C programming language?  The C programming language is a great language and it is a fine choice for a first language.  But if your buddies in school are all coding in Java or Python, you might consider using the same language they are using.  If you want to join an open source project eventually, then you might pick as your first language the language used by the open source project of your choice. The open source chess playing software GNU Chess v5 was written in C, but the next version, GNU Chess v6 migrated parts of the code to C++.  The open source chess program called Fruit was written in C++.  Then you might find that many scholastic programming contests use Java for the programming contests.

I think it is best to learn C before learning C++.  So if you plan to eventually learn C++, then learning C first is an excellent idea.  C++ is used a lot in video game programming.

Many tools and programming languages are written in the C programming language.  The GTK widgit toolkit used for GUIs was written in the C programming language, as was the Linux operating system.  Parts of the Python language are written in C.  The Pidgin open source instant messaging client was written in C.  The Ruby programming language and the PHP scripting language were written in C.

Here are a couple of excellent blog posts about the C programming language:  Why I Chose to Learn C and The Unreasonable Effectiveness of C.  The former blog mentions this website for learning C:  Learn C The Hard Way.  Here is another website for learning to program in C:  http://www.cprogramming.com/.  The blog also mentions a new book on the C Programming language:  21st Century C: C Tips from the New School by Ben Klemens.  I had mentioned other books for learning C in a previous post:  Logic for Programming and Comments on C Programming.

The C programming language would be a fine language for a first language, but Python or Basic would also be fine.  Java is not my first choice for a beginners language, but I do notice it is used a lot in high school computer science classes.  I will mention that I use the C programming language to prototype algorithms and functions that eventually end up in C++ or Java projects.  Because C uses curly brackets to define a code block, functions in C can drop easily into C++ or Java because they too use curly brackets.  However, if you use Python to prototype functions, then you will have to go back through the code and add all the curly brackets because Python uses indentation to define code blocks.

I will observe that the C programming language is used now mostly by hard-core programmers writing tools.  Applications programming is done mostly in Java these days.

Robert

The previous post mentioning the C programming language is:
Logic for Programming and Comments on C Programming, October 22, 2012 (Monday)

Sunday, February 24, 2013

Using Subversion with Netbeans

I googled for directions on how to configure Netbeans to use Subversion for code control.  I could not find satisfactory directions, but then discovered that I did not need to configure Netbeans to use Subversion.  Netbeans seems to discover the presence of Subversion and connects to it.  I have written detailed instructions on how to use Subversion with Netbeans:  Subversion_With_Netbeans.pdf

If you are new to using Subversion within Netbeans, you might find this document helpful.

Robert

Saturday, February 16, 2013

How to Install Subversion for Source Control

I was wondering if I should use software source control while I was working on a project at home.  Then I fumbled some keys while coding one day and accidentally broke my code.  What happened was that code that used to run quit running.  I did nothing intentionally to the code, I was just hopping between files and reading code, scrolling around.  What I discovered was that two lines were flipped around, they went out of sequence and would not work.  I discovered after investigating that the Netbeans IDE has functions, "Move Up" and "Move Down."  I stumbled into one of these by accident.  You can reach these through the menu bar with "Source > Move Up" (alt-shift-up arrow) and "Source > Move Down" (alt-shift-down arrow).  I must have pressed the hot keys by accident while in a hurry.  When I first discovered my file was broken I thought to myself, "if this was in source control I could just diff against the last version saved and I could see what the code was supposed to look like."  I was panicking and wondering if I had deleted a code block and what that code block was.  After this event I decided to install Subversion (SVN) for source control on my PC.

In the document following I describe how to install and use SVN on your PC for source control: Installing_Subversion.pdf. This document provides detailed directions, with screen shots, for installing Visual SVN as the SVN server and TortoiseSVN as the SVN client.

Software source control is important for protecting your code base.  Subversion and Git are currently the most popular systems for source control.

Robert

Sunday, January 27, 2013

BASIC, Good Language for Beginners

Update:
I have decided to recommend Python as the best first language for a beginning programmer.  Basic is still an excellent choice for a first language.  My reasons for promoting Python over Basic are explained here:  Python, Best Language for Beginners (July 20, 2013)

Original Post:
After much thought I have reached the conclusion that the best language for beginning programmers is BASIC.  It is close to natural language.  It was intended as a teaching language.  It is used professionally, so it is not used only as a teaching language.

Here is a list of articles I have written about Basic:
Learning to Program with BASIC Sunday, April 22, 2012
Just Basic Tutorials and WinHlp32 Saturday, September 8, 2012
Install Time: Just Basic vs VB Express Sunday, September 9, 2012
Power Basic and Liberty Basic Saturday, December 22, 2012
Small Basic Saturday, December 22, 2012

As I mentioned earlier, some people think Python is a good first language.  Many languages can be used as a first language.  A first programming language should be a procedural programming language.  In other words, not an object-oriented programming language.  There is a lot of baggage that comes with object oriented (OO) programming, so an OO language is better suited for a 2nd language.  As I pointed out in an article, The Texas Young Programmers Project, most programming competitions require use of the Java programming language, with is an OO language.  So for the sake of practicality, Java is probably a good second programming language.

I believe some young people benefit from early exposure to programming.  Programming is not for everyone, but it can be very important for some people.  I believe getting off to a good start is important, so the first programming language is important.  Then a second language is important.  As much as I like C, C++, and Python, I think the best languages to learn are Basic first and then Java second.

Middle school and early high school are good times for early programmers to delve into Basic.  Java would be good for senior high school.

Robert Canright

Here is a relatively recent (18 Dec 2013) blog post about Small Basic written by someone from Microsoft:
Small Basic is FREE!!!
Here is an earlier post (22 Dec 2012) by me about Small Basic

Saturday, January 12, 2013

Trouble Building Murach Java Code

Murach's Java Programming by Joel Murach is a popular book for people learning Java.  You can go to Murach's website and download the code examples in the book and run them.  I recommend that.  But you might run into a snag building the code (and you might not).

Here is what can go wrong and a couple of ways to fix the problem.  If you already have Java on your machine, an older version of Java, then you will have trouble building the code.  The code expects Java 7 and if you have an older version, your build will fail.

There are two ways to fix this problem.  One way is to right-click on the project, select "Properties", then where it says "Souce/Binary Format" you can pick a version of Java that you have on your machine.  I had Java 6 installed, to I selected Java 6 from the drop-down menu, hit OK, then I was able to build and run the project.  The project came from the publisher with the binary format set to Java 7 and I had to adjust that project property before the project would build because I did not have Java 7 on my machine.
Single-click on this image and you can see a larger version (right-arrow to see the other images).  Here's another fact to learn:  just because you install the latest version of Netbeans, don't think that you will get the latest version of Java when you do that.  You won't.  So when you try to build the Murach code, Netbeans will complain until you fix it either by changing the properties of the project so it expects Java 6 or by installing Java 7.

You have to go to the Oracle website to download the latest Java, which at this time is the Java SE Development Kit 7.  If you download the version for older Windows machines, you will get this executable for the installer:  jdk-7-windows-i586.exe.

After you install Java 7 on your machine, you still need to get Netbeans to recognize it.  In your project, here we are looking at the ch15_FutureValue project, select "Libraries" as shown below.
Right-click on the Libraries, select Properties, click on Manage Platforms, click on Add Platform, maneuver to the Java folder, and select jdk1.7.0.  Now that you have fixed Netbeans so it can see the Java 7 JDK, you can once again right-click on the project, select Properties, go to where it says "Souce/Binary Format" and the drop-down menu now has JDK 7 as an option.  Select JDK 7.  Now you can build your project with Java 7 as the Murach intended.  You can do a clean-and-build.  It will build without errors or warnings.  You can run the project and the Future Value Calculator works just fine.
I ran a sample set of numbers in the calculator.  If you are a young person, remember it is never too early to save for your future.

You do not really need to install Java 7.  You can set the project properties to build with Java 6 and you won't have any problems.  But when you are learning to program and a sample project that should build gives you trouble, it can be frustrating, which is why I am sharing this information.

If you are learning to program, do not get frustrated when things do not work as expected.  That happens a lot.

Robert

Saturday, January 5, 2013

Big Ball of Mud

Software design is challenging.  "Big Ball of Mud" is a term that is used to describe a bad software design:  "A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle."  If you want to write good code, you want to avoid creating a big ball of mud.

Software might start as a ball of mud, or it might degenerate from a coherent design to a ball of mud.  If you want to create good software, you need to have some understanding of lousy software.  I recommend you read the original paper by Brian Foote and Joseph Yoder:  http://www.laputan.org/mud/

You can watch  Brian Foote lecture on the Big Ball of Mud to programmers at Google in Mountain View, California.  The lecture (1 hour 6 minutes) is available at YouTube: http://www.youtube.com/watch?v=h6Y9aJhqO78.  I recommend it.  (If you want to be careful, go to You Tube and search for the Big Ball of Mud.)  The video has new content, not in the original paper.  You should see in this video his comment on the development process called Agile Software Development.  This comment is on the slide labeled "Agile Ike." It makes an important point with humor.

You will hear Dr. Foote refer to The Mythical Man-Month by Frederick Brooks.  Yes, every programmer should read this book.  He specifically mentions one essay from the book, No Silver Bullet -- Essence and Accident in Software Engineering.  You can download this from the internet from this website:  http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf.

Fred Brooks' "Essence and Accident" essay is interesting, but I can recommend a more practical exposition on writing good code:  Code Simplicity: The Fundamentals of Software by Max Kanat-Alexander.  This is small book and well worth your time.  There have been very many books written about writing good code.  This is the most practical book in that genre.

Robert

Thursday, January 3, 2013

Becoming a Programmer

You do not need a degree in Computer Science to become a programmer.  Technically, you do not need a college degree to become a programmer.  Bill Gates wrote and sold code while he was still in high school.  He dropped out of college to join Paul Allen in starting Microsoft.  Mark Zuckerberg dropped out of college when he started Facebook.  I know programmers who are fine programmers, but did not graduate from college.  Getting employment as a programmer without a college degree might be more challenging, but it is possible.

Sometimes a college graduate decides to become a programmer after completing a degree program unrelated to programming.  The following blog article (http://cacm.acm.org/blogs/blog-cacm/156836-teaching-programming-to-a-highly-motivated-beginner/fulltext) describes someone's experience in mentoring a businessman in programming.  What I hope to do with my blog, Canright on Software and Programming, is to share thoughts with people who are learning programming.

I want to assist young people, who are interested, to pursue programming.  When I was a young person I very much enjoyed learning chess and playing chess.  Chess is a game that offers as much complexity as you are willing to handle.  Programming, in some respects, is like a complicated game that some young people can enjoy.  Programming has the advantage that it can lead to useful skills.

The internet has many resources for someone learning to program.  I will mention the CodeProject as one source for beginning programmers.  Stack Overflow is another website where you can ask questions.  Sometimes just Googling a specific question will lead you to an answer.

A young person learning to program is not making a life-long commitment to becoming a professional programmer.  Sometimes programming is a useful skill in various business or scientific endeavors.

I hope some of my posts here might be helpful.

Robert

Learning to Program with Python

Some people think Python is a good first language for beginning programmers.  That might be so.  It has been around for a while so there is significant support for it, which includes the book Python Programming for the Absolute Beginner.  There is also Python Programming: An Introduction to Computer Science (2nd Ed.) by John Zelle.  There are many books and many on-line resources for Python.

Python is free.  You can download it and install it very easily.  It runs on Linux and on Windows.  It has an interactive interface you can use to test pilot Python statements, very much like the interface that Scheme provides.  This type of interface is called a REPL (read-evaluate-print loop).  Python does not require a compiler, so that is one less thing to worry about.

Here is an article, Teaching Programming To A Highly Motivated Beginner, where a professional programmer mentors someone who wants to learn programming.  This blog article mentions a free Open Course-Ware class from MIT (course number 6.00) that teaches an introduction to programming using Python.

There are three paradigms for programming:  (1) procedural programming, (2) object-oriented programming, and (3) functional programming.  You can use Python for either procedural programming or object-oriented programming.  I think it is best to learn programming with the procedural programming paradigm.

The  Python programming language is here to stay.  Whether you begin to learn programming with Python or with Basic, you will have a beginner's language that you will be able to continue using for a long time.  It some respects, it is a matter of taste or circumstance that will lead you to pick one language or the other as a first language.  If you pick Python, and you can find someone you know who is using Python or who wants to learn it with you, find out the people you know are using Python 2 or Python 3.  You will want to use the version your support group is using.

Robert

Here are previous articles by my on Python:
Installing Python  October 13, 2012
Notepad++ and Python October 13, 2012