Skip to main content

Programming vs Learning to Program

This is a multi-faceted topic, I want to look at one aspect in this post: effort vs. efficiency.

After creating a Caesar cipher in Ruby a few days ago, I looked at some other student's solutions. Some students were clearly experienced programmers- their code was 5 lines of densely packed recursive algorithms. 


At first I was discouraged and thought "What can't I do that?", and "Why doesn't my code look that?".  Then I reconsidered.


My solution to the Caesar Cipher represents my single handed efforts at solving a problem. The solution was based on the 4 weeks of experience I have with Ruby. 
Sure, there are built in methods that would have accomplished the task more elegantly (like the .modulo method).
 Sure, I could refactor my code making it shorter and making it run faster.

But, until I learn those methods and refactoring techniques, using them because someone else told me to would short circuit my learning. When I do search on StackExchange  for some help, I find students like myself asking for help on everything. It seems as though they have made no effort to solve the problem or find the answer themselves before asking someone else for the answer. 


Does this matter? The real world of programming (from what I hear) is much more cooperative. If you're stuck on something, you ask your co-workers or post a question on StackExchange. In other words, you use other people to help you solve problems. If I were writing a Caesar cipher program at work (not that they would need one), I would first check to see if it had been done already. If it had, I would look over the code, make a few tweaks, and voila.

The problems comes when you adopt this behaviour too early in your learning. Struggling on your own forces you to think carefully through problems, to try lots of different methods, to read documentation carefully. It forces you to develop the skills that you won't be able to rely on others for at work, namely, the ability to deal with frustration and the ability to think carefully on your own. 
Even your co-workers will tire of helping you (don't be a 'help vampire').

To return to the theme of this post, when learning to program effort is more important than efficiency. 





Comments

Popular posts from this blog

Einstein's Logic Puzzle (SPOILER ALERT!)

On Monday I began working through a Discrete Math textbook in preparation for some courses I'll be taking in January. There was a beautiful logic problem in Chapter 1, apparently created by Einstein. This is one version of it: Five men with  different nationalities and with different jobs live in  con secutive houses on a street. These houses are painted  dif ferent colors. The men have different pets and have   dif ferent favorite drinks.  Determine who owns a zebra and  whose favorite drink is mineral water (which is one of the  favorite drinks) given these clues:  The Englishman lives  in the red house.  The Spaniard owns a dog.  The Japanese  man is a painter.  The Italian drinks tea.  The Norwegian  lives in the first house on the left.  The green house is  immediately to the right of the white one. The photogra pher  breeds snails.  The diplomat lives in the yellow house. ...

CodeSchool vs Codecademy(or 'How socket inherits event listening methods and implements asynchronicity')

In this review I'm going to focus on the pedagogy that I see evident in some CodeSchool courses and compare them to  Codecademy. By pedagogy, I mean: 'How does CodeSchool teach?' and ' Does it do a good job of teaching?'. I'm going to argue that despite high quality videos, colourful web pages, and often ssspppeeeeeakkkiiiing...rrrreeally...slowly..., CodeSchool's pedagogy is inferior to that of Codecademy. There are many fantastic resources for learning to code on the web, and CodeSchool is one of them. So far I have completed courses in Ruby, Rails, Javascript, HTML/CSS, Jquery and Git on CodeSchool. The courses have all included high quality videos and colourful, interactive exercises- as well as  massive  pdf files of the slides ( the files take more than a minute to load on my machine .) The question is: does the higher production value mean better educational quality? The 'Try' courses on CodeSchool(such as Try Ruby and Try jQuery) are f...

Job as Entry Level Developer

After 4 months of work, sometimes focused, sometimes not, I accepted a job as an Entry Level Ruby on Rails Developer yesterday. This is after starting with zero knowledge on November 1, last year. Beyond knowing a little about coding (but getting the definitions of  REST and AJAX wrong), what were the reasons for the job offer?  I think it was the meetup group I started in January that made me stand out from the rest. The motivation for the meetup group was to help me become a better coder and to indulge my teacher instincts. After some initial meetings at the library and my home, an IT hub in town offered to host us. This meant extra advertising and prestige for the group. After announcing the meetup group at an Agile meetup group for developers, I got some volunteers to give talks. The first volunteer offered a talk on Ruby. As I was comfortable with Ruby I prepared a coding tutorial .  After the tutorial, which was attended by some beginners and some a...