Learneroo Links

A blog about education. On Learneroo Itself. Blog Home

Learneroo Blog

Learneroo Blog on Education and More. Created with the Learneroo platform.

Ruby Coding Contest Recap

September 17

The Learneroo Ruby Coding Contest ran during US daytime hours, but programmers joined in from all over the world! These were the final contest winners who will receive cash prizes, sponsored by Atlassian Bitbucket:

  1. Manuel A. Valenzuela
  2. Brad Bicknell
  3. Alex

Many other participants won other prizes, such as RubyMine licenses, ebooks from Pragmatic Bookshelf, and membership on Learneroo.

Ruby Challenge Solutions

This post will discuss a couple challenges and solutions briefly, and in the future we may look at some additional challenges.

Ruby on Rails Challenge - This involved building a simple Rails app quickly. Stay tuned for a future tutorial that will guide Rails beginners through this process.

Ruby Robot Challenges - This series of challenges involved programming a Ruby Robot to clean the room. Half the challenges let you see the room, and half the challenges hid it.

The first challenge was trivial, but the other challenges were hard. Here's a fast and "hack-ish" way to pass the challenges that displayed the room: simply hard-code the steps the Robot should take in a String. Each turn of the game, simply follow the next turn described in the string. For example, the following code beats Robot Looks Around in 116 turns:

class Player

  def initialize
    @distance_from_home = 0
    @moves_ar = ("rrrrrrrrrdddllludddllluuuuulll" +
        "ddddddddddrrrrrullluuuuuuuull" +
        "dddddrrrrrrdrrrdddlllllluuuuuuuulllu")
    @move = 0
  end

  def do_something(robot)
    if robot.detects_dirt?
        robot.clean!
    else
        robot.walk!(get_direction)
        @move += 1
    end
  end

  def get_direction
    case @moves_ar[@move]
        when "r"
        return :right
        when "l"
        return :left
        when "d"
        return :down
        when "u"
        return :up
    end
  end

end

The Contest Challenges

These were the main challenges in the contest. Sum Numbers but 5 simply asked for the sum of large ranges of numbers, but you needed to perform some optimizations in order to solve the challenge in Ruby within the time limit. One simple optimization you could do would be to cancel out the positive and negative numbers instead of summing them. For example:

def do_stuff(a, b)
    if(a<0 && b>0)
        if(a.abs > b)
            b = -b-1
        else
            a = a.abs+1
        end
    end

    sum = 0
    (a..b).each do |n|
        sum += n unless n%5==0
    end
    puts sum
end

Of course, if you knew the formula to sum a range of numbers, you could use it to sum a range of numbers and then subtract the multiples of 5.

One of the contest runner-ups used this method in a clear manner:

def do_stuff(a, b)
    bigger_sum = (a+b) * (b-a+1) / 2
    a_5 = (a/5.0).ceil
    b_5 = (b/5.0).floor
    fives_sum = 5 * (b_5 + a_5) * (b_5 - a_5 + 1 ) / 2
    puts bigger_sum - fives_sum
end

The first-place winner of the contest solved this challenge with very concise code:

def do_stuff(a, b)
    puts (b+a)*(b-a+1)/2 - ((a..b).detect{|e| e % 5 == 0}..b).step(5).reduce(:+)
end

Missing Spaces asked you to detect if one string of text could be split up into words from a given list. It could be solved with recursion, such as the following:

def do_stuff(word)
    puts recursive_break(word)
end

WORDS = ["a", "able", "are", "area", "be", "car", "care", "ear", "hello", "not", "note", "or", "to", "the", "world"]

 def recursive_break(text)
    return true if text.nil? or text.length == 0
    (0..text.length).each do |i|
      word = text[0..i]
      if WORDS.include?(word)
        result = recursive_break(text[(i+1)..-1])
        return result if result
      end
    end
    return false
end

It could also be solved with a built-in regex, such as in the following super-concise code:

def do_stuff(word)
    puts !!(word =~ /^(a|or|to|be|are|car|the|not|ear|area|note|care|able|hello|world)+$/)
end

This solution is just a few characters, but it won't be able to be used in the following challenge, where you'll want to build off the recursive solution.

The Ruby contest is over but the challenges are still up, so you can still jump into any challenge and try to solve it!


Understanding Recursion

September 9

If you don't understand recursion yet, see this post.


Ruby Coding Contest Live!

September 6

Can you solve programming challenges? Want to win prizes? Potentially interested in new job offers? Join the Learneroo Ruby Coding Contest!

The Ruby Contest is going on now and ends Monday 10pm EDT. Solve general, Ruby and Rails Programming challenges and win huge prizes!

To join the contest, sign up for Learneroo and Bitbucket and start coding! Keep track of links and contest updates on the Live Info page.


Lessons from my Successful Kickstarter Project

March 17

Almost half a year ago, I ran a Kickstarter that failed. At that time, I posted some lesson learned about running a Kickstarter. I’m happy to report that my recent Kickstarter is almost over and has been a big success! How did this one succeed?

Data

First, here's some data about my current Kickstarter (as of March 16):

  • Pledged via Kickstarter1 $6,093
  • Pledged via external referrers $2,355
  • Average pledge amount $34.62

  • Project Video Plays 6,244

  • 38.42% of plays completed

Here's a table of all the sources that brought in more than $40, in order of amount pledged:

Referrer | Type | # of Pledges

Read Full Post

What Programming Language Should You Learn?

February 16

Java vs. C# vs. Swift vs. Python vs. Ruby vs. JavaScript vs. PHP

Beginners often worry what language to learn first, but you can pick any modern popular language and get started. However you may as well pick a language that fits your goals, so see this chart which I recently updated:

Programming-language-chart

Interested in creating websites? Check out my Kickstarter!

For a short discussion of these languages see my updated post The Different Programming Languages. For an overall comparison of each language, its philosophy and environment, see this new table:

Read Full Post

Real Web Development for Entrepreneurs

February 12

Many people have ideas for new web applications but don't know how to create them. It's expensive to hire a developer to create an app, especially for a risky idea that may lead nowhere. Often a better alternative is to learn how to create the web app on your own. This way you'll keep full control and learn a useful skill even if the project fails.

There are two ways an entrepreneur can create a web application:

  1. Use a CMS like Wordpress to quickly set up a site. This can work for some content-focused sites but the app may need to be discarded if the site takes off. (See CMS vs. Framework)
  2. Learn how to program and develop an actual application. This is a lot more work, but you'll actually be able to develop something new and learn a very useful skill in the process.

Q & A

Entrepreneur: I'd like to develop a new application. What should I use to do so?
Answer: Ruby on Rails is a good and popular choice. It lets developers create new applications in a relatively short amount of time.

Entrepreneur: How much do I need to learn to create the app?
Answer: You don't need to learn everything a professional developer deals with, you can just learn the essentials to get a basic app set up. Startups initially create an MVP, or Minimum Viable Product to test out their idea and later work to refine it. You can initially learn what it takes to become a Minimum Viable Developer™ (MVD) and later refine your skills. Become a MVD so you can build your basic MVP.

Entrepreneur: What if I decide full-time programming isn't for me?
Answer: That's fine, you can always bring on a professional developer later in your project, and you'll be able to understand his or her work. And if your site fails before reaching that point, at least you were able to test out your idea and learn new skills.

Entrepreneur: What if it fails because I found programming too hard?
Answer: Well now you understand more about what web development entails and have broadened your horizons! And you only spent a little time learning the essentials, it's not like you spent 4 years on it or took out student loans...

Interested in learning the essential skills to become a MVD so you can build your MVP? Check out our Kickstarter!

MVD and Minimum Viable Developer are trademarks of Learneroo (Just kidding.)


Web App Framework vs. CMS vs. Website Builder

February 11

Ruby on Rails vs. Wordpress vs. Weebly - Code & Control

Say you want to create a website for your organization, community or small business. Or maybe you want to create a web application that will be the Facebook for X, the eBay for Y, or the Yahoo of Z. What tool should use to create your site?

In my last post I said that you should learn the highest level option that forms a complete abstraction layer:

Learn the highest level that can serve your purposes without requiring you to do dig beneath it.

I discussed using the Ruby language, the Ruby on Rails framework and the ActiveRecord ruby library. But there are website-builder tools and CMS's you can use to create websites without writing any code at all. If the highest-level tool is best, these tools would be better than custom-coding your app. When can you use such tools, and when do you need to code? How do you evaluate the tradeoff between an easy tool and a powerful one?

[code tower control

Comparing Languages
While higher-level tools let you build things more quickly and easily, you're always trading giving up some control or performance in exchange. In many cases, this doesn't make a real difference. For example, Ruby is a much better language to create your web app in than C , even though C runs much faster on a computer. These performance differences rarely matter, especially when you're starting out.

Languages vs. Frameworks
Now that you're using a high-level language, should you use a framework or code your app from scratch? Back in the 90's people often coded from scratch, but in the 2000's frameworks like Ruby on Rails were developed. In almost all cases, you should go with a framework like Rails. They provide a standard architecture for building web apps and provide useful libraries and re-usable components that make it easier to develop sites quickly and according to best practices. The more ready-built components you can use, the better.

Interested in learning web development with Ruby on Rails? Check out my Kickstarter!

Website Builders
However, with website builders you lose control to do what you want. You get full control of the content of your site, and a fair amount of control of the look and layout, but you cannot control what your site does. You can pick from the provided options, such as wiki or blog, but you cannot develop your own features. If you're just creating a small standard site that fits into one of these checkboxes, you may as well use them. However, if you're creating a new type of application you'll need to develop it on your own. Large website will usually have custom needs, but you can still use website builders for a small site or to test out an idea.

(See What to Use to Create Your Own Website for more tools you can use.)

CMS's
CMS's are in-between a website builder and a framework. They are used for managing content-based sites, such as for news or reference. The most popular one is Wordpress, which started as a blogging platform, but evolved into a platform for any type of content site. If you install Wordpress on your own web host, you will need to keep it up-to-date and secure but retain control over your application. There are a large number of plugins you can install on wordpress sites to add features without writing code, and you can develop your own plugins to add potentially anything. However, if you are planning on developing a custom application early on, Wordpress is rarely the best choice. Instead of architecting an application to fit your purpose, you will need to deal with a large existing codebase that was built for a different purpose. So go with Wordpress if your site fits into a standard blog or CMS, but go with a framework if you want to develop a custom application.

In short, if you need a standard content site, a website builder or CMS are a good choice. Otherwise, go with a framework like Ruby on Rails, which gives you full control without requiring you to re-create common components from scratch.

code tower control vs. work

The picture above shows the level of control that each category provides (the width of a brick)) and the amount of work or coding you need to create your site (the height of a brick). Note how a framework offers practically the same control (to create any kind of site) as coding from scratch, but requires much less actual code to do so. As you move up the tower, you give up control in exchange for using more pre-built parts.

The table below summarizes what each category can do:

Category Example Use case ready out-of-the-box Control - What can you do? Work - what you need to do
Language Ruby Build application with radically new architecture Standard language libraries Everything Everything
Framework Ruby on Rails Practically any web application Structure to follow and libraries to create site with Almost anything Create site using provided libraries and structure
CMS Wordpress Blog or news site Actual website Change look and structure of site, add plugins for new features Customize, maintain and keep secure
Website Builder Weebly Company info site 'polished' website Change style of site Pay them (for full features)

On Kickstarter:


Abstraction Programming and Education

February 10

All code ultimately comes down to electric charges, so should you learn physics in order to program?

Tl;dr: Learn the high-level stuff first, if they're complete.

Previously, I discussed the languages a beginner needs to learn to create a web application with Rails (such as HTML and Ruby), but I skipped over more fundamental questions. Perhaps we should follow universities and require people to first study many basic topics before coming near something practical like web development? The Web Development curriculum would start with various branches of logic and math, move on to assembly languages, C programming and operating systems, and after a few years get up to Ruby on Rails. Alternatively, we could follow the practice of some tutorials and start building a complete application right away before even covering programming basics, Ruby or HTML. When every technology is built on levels beneath it, what is the balance of prerequisites one should learn before jumping into a higher subject?

Code Tower of Babel

The Complete Layer

I think what's important is having a complete abstraction layer to be able to work with. Learn the highest level that can serve your purposes without requiring you to do dig beneath it. For example, every general-purpose language (such as Java, Ruby or JavaScript) provides a complete abstraction layer to build with. While these high-level languages may be implemented with lower-level languages, you don't need to worry about these details when coding. You can build a wide range of applications in Ruby without ever touching the C code that it may be interpreted with. Ruby is not a leaky abstraction, Ruby is a complete package. In certain cases a specialist could use his knowledge of the lower level details to optimize code, but this is not something a beginner needs to worry about. Learn how to build applications and later you can learn advanced optimization techniques. After all, "Premature optimization is the root of all evil". 1

Ruby or Rails First?

If a level does not form a complete abstraction layer, you will need to learn more than one layer to create things. Yet you can often choose between learning the higher level or the lower level first. For example, one could start learning Ruby on Rails before even learning Ruby, the language it's written in. While this is possible, I don't think it makes sense for people new to programming. Instead you should get used to programming by creating simple Ruby programs before getting lost trying to tackle a complex framework in a language you don't understand. After you've coded with Ruby, you can then tackle Ruby on Rails one part at a time.

SQL or ActiveRecord?

SQL is used to communicate with databases, but Rails provides an alternative library, ActiveRecord, to generate the SQL for you. ActiveRecord does not form a complete abstraction layer since there are useful database actions it cannot do. A professional Rails developer will need to learn both ActiveRecord for concise and clear code, and SQL for advanced queries. What should a beginner learn first? As discussed before, I think beginners can start with ActiveRecord since it will be easier for them initially and it can perform all the requirements of a basic app without any hand-coded SQL. Programming students can learn the syntax of SQL later when they need it. (I recognize people could have different opinions on this area, since ActiveRecord cannot actually do everything SQL can.)

SQL tower

Abstracting Abstractions

This basic idea of abstraction can be further abstracted and applied to other areas. If a subject can be applied fully at a certain level (without going into lower-level details), it can be learned at that level. For example, there are many areas of math that can be done by computers. In some of these areas, the student could benefit from understanding the concepts the math is built on so as to apply it to new cases. However, in many areas the techniques used to solve the problem aren't relevant, and the computer forms a complete abstraction layer on top of the mathematical details. For example, there are many techniques for calculating integrals, but these aren't relevant to the fundamental study of calculus. Students can just learn how to use computers to solve such problems, they don't need to learn how to solve the problems manually. Solving problems with a paper and pencil when you can use a computer is like writing machine code when you can use Ruby or Python.

Math tower

Humanity has come a long way since we scribbled equations on stones. This has only been possible by building abstraction on top of abstraction. A topic that was essential in the past could have been abstracted away since then. Let people learn what they need or what they're interested in, don't make them learn the past. People who remember the past too much are doomed to repeat it.

1. Donald Knuth, about optimizing your code too soon.

Interested in learning the essential principles and practical aspects of web development? Check out my Kickstarter!


Ruby on Rails for Web Designers

February 9

So you're a web designer. While you can design great web pages, you don't touch the back-end that runs a web application. Should you learn the basics of Ruby on Rails, a full-stack framework for creating web applications? I think there are many benefits to doing so.

By learning Ruby on Rails, you'll be able to independently create your own applications. This will let you create your own side-projects and you'll be able to make sure they look great! At your main job, you can design a prototype that back-end developers later take over or re-create. (See this post from a designer at Basecamp, the creators of Ruby on Rails.) Even if you don't end up coding that much on the back-end, it still will be easier to work with back-end developers when you understand the full framework. At the very least you'll gain a better appreciation for how web applications are created. And if you really like Rails, you can always consider pursuing it in more depth or even professionally!

At the beginning, you don't need to go through a complicated book or course. You can get started by just learning the essentials to creating a web application and later you can decide what you want to learn in more depth.


To make Ruby on Rails easier to learn, it would help to have a visual and interactive tutorial to covers the essentials you need to know. I'm creating such a course that will teach Ruby on Rails with interactive challenges and cartoons. Please check out my Kickstarter and consider backing it!

Kickstarter to Learn Ruby on Rails

Share this link: http://kck.st/16XFsjW


Learn Web Development Kickstarter - Q & A

February 8

We launched a Kickstarter project last week, so here's some Q&A on its goals.

Q: What is this project about?
A: We're creating an new course on web development with Ruby on Rails.

Q: Aren't there already many courses and books about Ruby on Rails?
A: Yes, but they're too dry. Web development is a hard topic for beginners to learn and it's hard to go through a long book, so this course will be interactive and make things easier for beginners.

Q: Sounds good. I’m interested in creating web apps but can’t read through a 600-page book on the topic. How will this course help specifically?
A: We will provide programming challenges so you can learn by doing. Initially there will be online challenges so you can get started right away, and later we’ll provide downloadable coding challenges (as "test cases”) so you can continue coding in a professional environment. It’s easy to get lost when coding on your own, but it's like following a straight path when you are constantly working on coding challenges. You know right away if you’re right or wrong and pass one challenge at a time. Our course will be more like a game than a textbook!

Q: OK, but I still don’t want to read through thousands of paragraphs of plan text, how are you helping with that?
A: To make the learning more interesting, we will also create cartoons and diagrams to explain basic concepts. We won’t just thrown in random cartoon characters at different points, but we’ll actually demonstrate basic programming concepts visually. For example, in the cartoon on our Kickstarter page, you can see Ruby on Rails represented as a physical machine. This helps people understand fundamental concepts of web development by seeing it visually represented.

Q: Will there be videos too?
A: There will be a small number of videos when it can be particularly helpful. In general the main content will be text + challenges + visual cartoons or diagrams.

How to Back the Kickstarter

Q: Why not make the whole course with videos?
A: Videos are hard to skim, search or reference, but this course is focused on modularity and reference-ability. You can jump into any part you want and start learning it or skip a topic and come back to it later. Remember learning something somewhere, but don’t remember the exact details? It will be easy to refer right back to the text or code you’re interested in without watching through a video. Our course will also focus on just one topic at a time so you can easily find the information you’re looking for in the appropriate section.

Q: What are theses topics you will cover, one at a time?
A: First we'll cover how websites work, HTML & CSS, and programming with Ruby Next we'll give an overview of Rails, and then go into each part of the Rails structure one-by-one, starting from the data and moving to the views. Finally, we'll show how you can build a complete application!

Q: How much detail will you provide?
A: We’re not going to cover all the details, just what you need to build out a project from each section. The goal of this course is to get you started with web development, not to bury you with it. You can use this as a starting point to further learning or to become familiar with web development so you can collaborate better with professional developers. You can choose what you want to learn and why. We will also provide recommended resources so you can continue learning afterwards.

Get started learning web development and Back us on Kickstarter!


Kickstarter Launched

February 4

Today we launched our Kickstarter to teach web development with ruby on rails. It will contain interactive cartoons and challenges so you can learn by doing.

We've been elected as a staff pick and are already 15% of the way to our goal!

Check out our Kickstarter!


Interactive Cartoon Guide to Ruby on Rails

January 29

I'm creating a new course for beginners to learn web development with Ruby on Rails. While there are many existing resources about Ruby on Rails, I think there's room fro something that is more fun and engaging for beginners. My course will offer clear tutorials, interactive challenges and exciting visual content!

You can read more about it here Interactive Cartoon Guide to Ruby on Rails and check out the links there for sample cartoons.


Algorithms for Interviews and Jobs

November 26

The Algorithms Tutorials on Learneroo were pretty popular, so we created another module to help you review Algorithms:

Algorithms For Interviews

This module reviews answering questions, analyzing algorithms, and algorithms strategies. It briefly reviews basic concepts in Data Structures, Trees & Graphs and Recursion, and links to relevant tutorials and challenges on Learneroo. The last two pages review software design and provide additional resources to study.

Jobs

Are you interested in programming job opportunities? Let us know by updating job profile with your availability, location and description or profile links. We'll let you if we find a good match!


Free Membership on Learneroo

October 29

I made some changes to Learneroo recently, which may have limited some free users of the site. To get full access, here's a coupon code for free membership on the site: Learn21. Simply sign in and enter the coupon code on your membership page to get 21 days of membership. Members get unlimited access to the site!


New Algorithms Tutorials

October 29

Since the Algorithms tutorials were very popular, I created 2 new ones:

The Algorithms Tutorials now covers the common Data Structures and Algorithms you need to know!

Coming soon: A module to prepare for technical interviews that will provide a concise review and link to the relevant tutorials and challenges.


Free Membership for Teachers

September 28

Do you teach Intro to Computer Science, Java Programming or Algorithms? If so, you're eligible for free membership on Learneroo! Membership gives you unlimited access to the content and challenges on Learneroo. Just fill out the form below with your info. You may also be eligible for free membership for your students!

Tutorials and Challenges on Learneroo
Explore the Java tutorials, starting with the Intro to Java and then Object-oriented-programming with BlueJ. Practice beginner programming challenges, program a Java robot or learn Algorithms!


Learneroo on Reddit and the Powers of 10

September 23

Here's some recent news about Learneroo and the powers of 10

1000 Votes on Reddit

Learneroo was recently on the top of the programming Reddit, where it received over 1000 upvotes! Check out the Algorithms Tutorials that were voted so high, where you can learn Algorithms by solving challenges!

$10 Membership

Now's a great time to sign up for membership for only $10 / month. Basic membership gives you full access to all content on Learneroo and unlimited code submissions. Prices will go up soon, but you can lock in low prices now!

10,000 Users

User #10,000 recently joined Learneroo! Sign in to see where you rank among all the Learneroo Users.

$100,000 Offers

Interested in getting a job in tech? Join Hired.com and tech companies will bid on you! This way you know what you'll be paid before you even accept an interview. The average job offer on Hired was over $100,000.


Changes on Learneroo

August 19

Here's some updates about Learneroo.

Membership

To cover the costs of running the site, I'm charging users after a certain amount of usage. Get membership for only $10 a month to get unlimited access to the site, including all the premium content.

If you reached the limit and still want to try it out a little longer, you can try one of the following coupons (each coupon works once):

  • 42a00a5449c98a0e
  • 3417afc7e4f7b548
  • 3eab4c81acb33fc8
  • dba9e9fa229f910c
  • 97e4ac4e648ce5af

HTTPS

To make the site more secure, I'm trying out HTTPS-only. This means your connection to Learneroo is secure so you don't need to worry about your credentials being hacked. Note that the payment form uses client-side encryption as well, so it has always been secure.

Coming Soon

I will be making changes to how the code is run so that you get results back much faster without issues.


Lessons from my Unsuccessful Kickstarter Project

August 18

A year ago, I ran a modest but successful Kickstarter to teach Java programming online. Recently, I decided I would run another more ambitious Kickstarter to teach people how to create websites. The funding period is almost over and the project is far from its goal. What went wrong?

Previous Kickstarter

In my first Kickstarter, the project got some starting support from family and friends, but then began showing up on Kickstarter to people exploring projects. 58% of the project was funded by people browsing or searching Kickstarter, here's the overall breakdown:

Referrer | Type | # of Pledges | % of Pledged | Pledged

Read Full Post

Web Development for Non-Developers

July 22

Many people are interested in creating websites but don't necessarily want to become professional developers. They may have an idea for a startup that they want to test out before hiring a developer, or they may want to create a site for their small business or organization. Other people may work with developers but want do more on their own, while they leave the full-scale programming to the professional.

Some people may be scared off by the programming knowledge needed to become a developer. There's too many technologies to learn: HTML, CSS, Javascript, a backend language, maybe a database language too, and it's not like programming is easy to begin with! However, there's no need to learn full-fledged programming for people to to get started with their own websites. People can start creating websites without any code at all, and learn the basics as they need it.

There are many tools they can use to setup an initial site or web app, and they can customize additional aspects afterwards. Some website-builder tools offer an easy way to set up a site, but are more difficult to customize later. Instead, one should use tools that create standard HTML-sites so the website creator or developer can edit any part of the HTML later on.

I created the Web for All Kickstarter Project to help non-developers easily create their own sites. The course will teach people how the web works and how to create standard-HTML websites without coding. It will then cover the basics of coding on the web and how to apply it. You can view free early sample content here:

Please check it out and share the Kickstarter!


Web Development for Entrepreneurs, Marketers and Biz-devs

July 18

Many people are interested in creating websites but don't necessarily want to become professional developers. They may have an idea for a startup that they want to test out before hiring a developer, or they may want to create a site for their small business or organization. Other people may work in tech companies with web developers and may want do more on their own, even while they leave the full-scale programming to the professional.

There's no need to learn full-fledged programming to get started with your own websites. You can start creating websites without any code at all, and learn the basics as you need it. There are many tools you can use to setup an initial site or web app, and you can customize additional aspects afterwards.

I created the Web for All Kickstarter Project to help business people and others easily create their own sites. The Kickstarter will let me create a course to teach people the practical tricks to creating a website without too much programming. Users will first get a basic understanding of how the web works. Then they'll find out how to get free or cheap web hosting and how to setup web applications on it. Next they'll learn the basics of HTML and CSS so they can customize their web pages, without worrying about more about more advanced details. Finally, they can learn basic programming and Javascript concepts and how to apply them without writing full applications.

The course won't just be lectures or an online book. Instead, it will have interactive graphics and challenges so people can learn by doing. You can view free early sample content here:

I can only create the course if I reach my funding goal, so please share it with your friends and consider backing it today!

http://kck.st/1seqZHO


Finding a Web Host and Creating a Site

July 17

Here's an early sample from the Web for All Tutorials in which Jim consults the Guru and finds out his best options for creating a website.

Jim: I’d like to create a website for my lemonade stand. How do I get started?
Guru: The easiest way is to use an online site builder. For a quick solution, try the free Google Sites or Wix.com for a more modern look. However, if you want more control to edit everything, you should use a tool that lets you deal with the actual HTML.

Jim: Yes, I’d like to have full control. Can you explain what exactly HTML is?
Guru: Every web page is made up of HTML. The HTML marks the different elements of a page, such as headings and paragraphs. To create a web page, you can just upload your HTML file to a web server.

Jim: What’s a web server and how do I get one?
Guru: A web server can simply be a computer connected to the internet that serves web pages and files to other computers that request it. In practice, you’ll want to get a web host to host your web pages on their web servers.

Jim: OK, How do I get a web host?
Guru: Well that depends, do you want a static web host or dynamic one?

Jim: Damnit, I don’t know, what's the difference?
Guru: A static web host just serves web files to those that request it, but doesn’t do any computing on its own side (on the back-end). A dynamic web host can do stuff first, such as running code or accessing a database.

Jim: So which one do I need?
Guru: If you just wanted a simple site with only HTML files, you could use a static web host. Do you want to create any other sites besides for your lemonade stand?

Jim: Well, I’d also like to experiment with a startup idea I have that will demolish Facebook.
Guru: Then you’ll want a dynamic web host so you can run applications on the backend. You can also use web-based tools for editing your lemonade stand site, so you don’t need to edit all the HTML on your computer. So just pick a good dynamic host and get started.

Jim: OK, how do I pick a web host?
Guru: You have 2 general choices to go with: shared hosting or PAAS (Platform-As-A-Service) hosting. Which do you want?

Jim: PAAS my AAS! I just want a website already. I don’t know what these terms mean.
Guru: Patience grasshopper. Remember web servers? Well your little site doesn’t need a whole web server. So shared hosting puts a whole bunch of sites on 1 web server. PAAS or Cloud hosting does the same thing, but in a smarter way so you can easily scale up. Also, some PAAS hosts are free initially.

Jim: So why the hell wouldn’t I go with a PAAS host?
Guru: Shared hosting offers some tools, such as one-click app installations, that can be useful for beginner web creators.

Jim: Since I’m going to be the next Facebook, I need to scale up. So I’ll take a PAAS. Where can I get a free one that’s still easy to use?
Guru: OpenShift is a good PAAS that provides a generous free tier. In fact, it may be better than many paid shared hosting options (but without the support).

Jim: Finally an answer! So now that I have a web host, what do I do with it?
Guru: Well, you can start by installing Wordpress on it (in a couple clicks) so you have a quick site. Later we can look at other alternatives, including completely static options.

Jim: If I’m going to use Wordpress, wouldn’t it be easier to just Wordpress.com?
Guru: Yes, but then you couldn’t customize it how you want. By installing your own Wordpress site, you can easily install thousands of plugins and themes for free.

This is a sample of some early content from the Web for All tutorials. Check out the Kickstarter page for more on the full tutorials, which will include challenges and cartoons.


The Web for All - Kickstarter

July 13

Until now, my main focus on Learneroo was full-scale programming like Java and Algorithms. Many people may not want to create full-scale software programs but are still interested in learning how the web works and in creating their own websites. However, it's difficult to know how to get started.

In my next Kickstarter, I plan to cover all the topics and tricks you should know to get started creating websites. I'll cover the difference between using online web apps and doing it yourself, how to find cheap or free web hosting and how to get started installing your own web applications. Later, I'll cover the basics of HTML and CSS so you can have full control of the look of your site. Finally, I'll cover the fundamental concepts of programming and javascript, so you can do even more!

https://www.kickstarter.com/projects/arikrak/the-web-for-all-learn-to-create-websites


Java Jobs II

June 16

We've mentioned before that Java may be the most in-demand programing language, but will it you be happy with a Java Job? Well, CareerBliss did a survey and found that Java Developer is the happiest job there is! Here's the top 10 jobs in the survey, from Forbes:

  1. Java Developer
  2. Embedded Software Engineer
  3. .NET Developer
  4. Medical Technologist
  5. QA Engineer
  6. Credit Analyst
  7. Management Consultant
  8. Network Engineer
  9. Data Analyst
  10. Web Developer

Note that most of the jobs are programming related. To become a Java developer, sign up for the Online Java Bootcamp!


New - Java Budget Bootcamp

June 2

It's hard to learn Java on your own, which is why we offer the Java Bootcamp program. However, not everyone can afford to pay close to $300/month for a mentor. So we're trying a new program - get everything else in the bootcamp, including live support, for only $95/month.

This includes:

  • Access to all the premium content on Learneroo, including new content coming soon.
  • Stuck on something? Ask your question in the comments and get it answered.
  • Need quick help? Chat with a mentor at scheduled times who can jump right into your code and help.
  • Get feedback on your code so you learn how to improve.
  • Its hard to learn without structure. Get a customized schedule to follow so you stay on track.
  • At the end of your program, get help developing your own Java project!

Satisfaction Guaranteed
If you're not satisfied with the Learneroo Budget Bootcamp, you can cancel within 2 week of your purchase and receive a full refund. After 2 weeks, you can always unsubscribe and receive a refund on the remaining time of your purchase.

Sign up now with Paypal, or contact [email protected] to find out more about the different Java programs.


Coding the Java Explorer

May 29

You could see the whole board in all the challenges in the Advanced Java Explorer except the last. This means you could hand-code the Explorer to defeat the enemies and one contestant actually used this approach to beat the challenges. You look at the board and figure out the plan of attack and then encode it in a long String / Array of moves where the explorer looks at the next character to determine each turn.

A more general solution would be to create an AI for the explorer to analyze the board each turn and decide what to do. You can build up the AI from level to level, until it easily beats the final level. This was the approach mostly followed by the winner of the contest, Egor Kulikov. This post will look at solving the first two challenges.

Hello Again

In this level, the explorer needs to get by a Pawn and then reach the Goal.

▥▥▥▥▥▥▥▥▥▥
▥♖...▥...▥
▥....▥...▥
▥...♟....▥
▥..♟.....▥
▥▥▥.....↢▥
▥........▥
▥......↢.▥
▥.....▥.☆▥
▥▥▥▥▥▥▥▥▥▥

A direct move-or-fight method would die when facing the Archers, so you need to recharge at some point. If you just recharge when you're energy is low, you'll get stuck in a loop when facing the Archer's attack. Instead, you should recharge when low on energy unless you're under attack. One way to solve it is to keep track of your health, and only recharge if it's low but not decreasing. This is similar to the Archer and Archers! levels from Java Explorer 1D and 2D:

class Player{   
    int health = 100;
    public void play(Explorer explorer){
        if(explorer.getHealth() < 90 && health == explorer.getHealth()){
            explorer.recharge();
        }
        else if(explorer.getSpace(Direction.DOWN).isEnemy()){
            explorer.poke(Direction.DOWN);  
        }
        else if(explorer.getSpace(Direction.RIGHT).isWall()){
            explorer.walk(Direction.DOWN);
        }
        else{
            explorer.walk(Direction.RIGHT);
        }
        health = explorer.getHealth();
    }   
}

Knights

Knights are much more dangerous than other enemies, since one you come into their line of sight, there's almost no escaping them. To defeat them you need to carefully encounter one at a time, bring it away from its friends and fight it there. Then you can recharge and face another Knight, until you've cleared a path forward.

Although you can use lookAround in this level to detect Knights, you can also use your previous code to detect when you're under attack and then follow the 'flight then fight' pattern. You'll just need to make sure you don't get to close to more than one Knight. In the code below, the Explorer pauses when moving down to see if anything attacks.

class Player {

    int y = 1;
    int moves = 0;
    int health = 100;
    boolean flee = false;
    public void play(Explorer explorer){
        if(explorer.getHealth() < 80 && !underAttack(explorer)){
            explorer.recharge();
        }
        else if(attackEnemy(explorer)){         
        }
        else if(flee){
            if(y>2){
                explorer.walk(Direction.UP);
            }
            else{
                explorer.walk(Direction.DOWN); //meet your enemy
                flee=false;
            }
        }
        else if(underAttack(explorer) && y>2){ //retreat
            flee = true;
            y--;
            explorer.walk(Direction.UP);
        }
        else if(explorer.getSpace(Direction.RIGHT).isWall()){
            if(moves%2==0){ //wait a move to see if attacked
                explorer.walk(Direction.DOWN);
                y++;
            }
        }
        else{
            explorer.walk(Direction.RIGHT);
        }
        health = explorer.getHealth();
        moves++;
    }   

    boolean attackEnemy(Explorer explorer){
        for(Direction d: Direction.values()){
            if(explorer.getSpace(d).isEnemy()){
                explorer.poke(d);
                return true;
            }
        }
        return false;
    }

    boolean underAttack(Explorer explorer){
        return health != explorer.getHealth();      
    }   

}

The alternative would be to just hand-code a solution, as mentioned above. For example, this solution reaches the goal in only 51 moves:

class Player{

    int move = 0;
    char[] ar = "rrr>>>>>>>hhhhhhhrrrrddulvvvvvvvvhhhhhhhhhrlddddddr".toCharArray();

    public void play(Explorer explorer){
        switch(ar[move]){
            case 'r':
                explorer.walk(Direction.RIGHT);
            break;
            case 'l':
                explorer.walk(Direction.LEFT);
            break;
            case 'd':
                explorer.walk(Direction.DOWN);
            break;
            case 'u':
                explorer.walk(Direction.UP);
            break;
            case '>':
                explorer.poke(Direction.RIGHT);
            break;
            case '<':
                explorer.poke(Direction.LEFT);
            break;
            case '^':
                explorer.poke(Direction.UP);
            break;
            case 'v':
                explorer.poke(Direction.DOWN);
            break;
            case 'h':
                explorer.recharge();
            break;
        }
        move++;
    }   
}

Java Coding Contest Results

May 27

Results

Yesterday, Learneroo ran our first Java Coding Contest. Over 200 people signed up and over 30 solved at least one challenge. After some hiccups (we learn by doing!), the contest got underway and saw some great contestants and code! The final winners were:

1 - Egor Kulikov
1 - Fred
2 - Bantha
3 - Arthur Wong

Yes, there are two 1st place winners. Egor, the previous winner of Google Code Jam and other international contests, won with solid clean code. Fred solved the ordinary challenges and the early Java explorer challenges fairly, and then beat the later levels by hacking the game with reflection to delete all the enemies! We didn't have an explicit rule against reflection, so we decided to award both winners first place. Jetbrains kindly agreed to sponsor two copies of IntelliJ IDEA Ultimate, so both winners will receive the prize. (Didn't win? You can download IntelliJ IDEA from Jetbrain's site.)

Below is a quick explanation of some of the challenges.

Starting Challenge

This challenge was to test out the interface and your if statement. In Java, you need to make sure not to call an index out of bounds, so here's a solution:

static void doStuff(int[] ar){
    int sum=0;
    for(int i=0; i<ar.length; i++){
        sum+=ar[i];

        if((i<ar.length-1 && ar[i+1]==2) || (i>0 && ar[i-1]==2) ){
            sum+=ar[i];
        }
    }
    System.out.println(sum);
}

If you solved it in Ruby you could skip the out-of-bounds check:

def do_stuff(ar)
    sum=0
    ar.each_with_index do |num, i|
        sum += num
        if ar[i-1]==2 or ar[i+1]==2
            sum += num 
        end
    end
    puts sum
end

Correct Change

To do this problem efficiently, you should avoid using too many loops. An earlier correct change challenge asked if you could reach a sum with 2 coins, and could be solved with no loops. This one asks about 3 coins, so it makes sense to use 1 loop for it. Here is Egor's solution:

public static void doStuff(int[] ar){
    //the number of each coins
    int q1 = ar[0];
    int q11 = ar[1];
    int q111 = ar[2];
    int target = ar[3];

    // Go through all amounts of 111 coins until target
    for (int i = 0; i <= q111 && 111 * i <= target; i++) {
        //current = amount remaining when using `i` 111-coins
        int current = target - 111 * i; 
        //use as many 11's without going over
        int take11 = Math.min(q11, current / 11);
        current -= take11 * 11;
        //then check if the 1's can fill in the rest.
        if (current <= q1) {
            System.out.println(true);
            return;
        }
    }
    System.out.println(false);
}

Select Change

The tutorial on Backtracking covered the basic concepts for this challenge. For this challenge, you just need to keep track of how many coins in a row you selected. Here's one way to do that:

static void doStuff(int[] ar) { 
    int num = ar[0];
    int[] ar2 = Arrays.copyOfRange(ar, 1, ar.length);
    System.out.println(sumCoins(0, ar2, num, false));       
}   

static boolean sumCoins(int start, int[] nums, int target, boolean didPrev) {         
     if(start>=nums.length)
        return target == 0;  

     //ignore current coin, so target doesn't change
     boolean b = sumCoins(start+1, nums, target, false);

     //alternatively, take current coin:
     boolean a;
     if(didPrev) //skip next if would be 3-in-a-row
          a = sumCoins(start+2, nums, target-nums[start], false);
      else  //otherwise go on to next coin
          a = sumCoins(start+1, nums, target-nums[start], true);

      return a || b;
} 

Manhattan Meeting Place

To optimally solve this challenge, think about where the best meeting point would be on one street. The mean point? No, there's no reason to make multiple people walk to be closer to 1 far-away person.

Example:

0....5....0....5....0.......28
.PPPPPP.....................P

People are located at positions 1 through 6 in the above 'diagram' and at position 28. The mean is located at position 7. Should that be the meeting place?

If you move the meeting place from 7 to 6, you'll make it 1 unit closer to 6 people, and 1 unit farther for 1 person, for a gain of 5 overall. In fact, the meeting point should be shifted until there's an equal number on each side, i.e. the median. In the above diagram, that would be at point 4, which would leave 3 people to each side.

The same rule applies to a 2D grid. The best place to meet is the median of the x coordinates and the median of the y coordinates. Any shifting from this point (past a person's x or y values) would make the point further from more than half the people.

Thanks to everyone for participating!


Learn Programming by Example and with Challenges

March 14

Learn by Example

Often, the best way to learn how a programming language or topic is to look at an example. Instead of reading many paragraphs explaining, one can sometimes just look at example code and see how it works. As the saying goes, "A Code is Worth 1000 Prose".

That's why I like the site Learn X in Y minutes, which demonstrates different programming languages through example code. If you know some programming, you can pick up the basics of different languages with it, and it can also be used as a reference to lookup information later.

Learn by Doing

If you're actually trying to learn a language, just looking at example code isn't enough, since you need to practice it on your own. It helps to have challenges that test your knowledge and "force you" to write correct code.

Since LearnXinYMinutes is licensed under Creative Commons, I figured I'd edit it a bit and add in questions and programming challenges. I started with Ruby, and posted it to Hacker News. This was well-received, so I created additional modules on Javascript and Python. I also created another version for Java, which was based on previous Learneroo tutorials.

Try it Out

If you're interested in learning one of these popular languages or want to quickly look up how to do something, check out Learn X by Example and With Challenges:

If you're interested in getting more practice you can try out these easy challenges:

There's also premium intermediate challenges on Strings, Loops, and Real Math. You can solve all these challenges in multiple languages, and see how they compare!


Lecture Videos and Learning

February 12

Ever since second grade, I found school lectures and classes to be boring. Online education is growing rapidly, but many education sites simply move the lecture online. At Learneroo, we believe the primary medium of learning should be through text, challenges and interactive content. These allow users to:

  • Be actively involved in learning
  • Review or skip any part easily
  • Search and reference information later

While we don't think videos should be the main way to learn a subject, videos are OK if they're short and skippable. Sometimes, a short screencast can be useful to show how something is done on a computer.

So we started adding a few optional videos to Learneroo. For example, see the hidden videos in Variables and Methods that cover the same material as the main text. See the video below to learn about the new visual debugger on Learneroo. To read more about our philosophy, see our new Seven Principles Page.


Discounts - Satisfaction Guaranteed!

February 7

Interested in getting extra content and help with premium membership on Learneroo? You can try it out for $9.50 for the first month!

Interested in the weekly mentor meetings (and more) of the Bootcamp Program? You can try it out for $75 for the first 2 weeks!

Satisfaction Guaranteed
If you're not satisfied with any purchase on Learneroo, you can cancel anytime within 1 week of your purchase and receive a full refund. After 1 week, you can always unsubscribe and receive a refund on the remaining time of your purchase.


Membership on Learneroo

January 27

Online tutorials are great, but sometimes people need additional help when learning a topic. That's why we launched the Java Coding Bootcamp, where users can get extra help, access more content, and meet weekly with a mentor. We offer a tutor and much more for less than the cost of a tutor alone, but it was still too expensive for many users. To solve this issue, we are now launching a membership program to the general public:

Learneroo Premium Membership

Everyone who enrolls in this program will receive the following:

  • Premium Modules
    Learn about the Java Library and solve problems with Strings, Double Loops and Real-world Math! More modules coming soon.
  • Premium Downloads
    Download extra projects for learning on your PC
    Download the content of any Module, so you can read it anywhere.
  • Extra Help
    Get Help in the Comments on Learneroo! We will reply within less than one business day, and often within an hour!
    Want to chat about problems? Ask us a question during our office Hours. We will soon announce available times.
  • Bonus - Members will also receive additional resources and links for continuing to learn Java.
Get Access to all of the Above for only $25 / month. Sign up now and be entered for a chance to win a free tutoring session with one of our mentors!


Choose how long to Sign up for:


As before, if you want regular mentoring sessions and other benefits, check out our Coding Bootcamp!


The Mean, the Median and Startup Equity

January 20

Most startups fail. So why would smart people continue to start them? Paul Graham answers that founders are focused on the average outcome, not the median:

If you judge by the median startup, the whole concept of a startup seems like a fraud. You have to invent a bubble to explain why founders want to start them or investors want to fund them. But it's a mistake to use the median in a domain with so much variation. If you look at the average outcome rather than the median, you can understand why investors like them, and why, if they aren't median people, it's a rational choice for founders to start them. Paul Graham, Startup = Growth

The focus on average return makes sense for investors who invest in many startups, at least for the top angel investors and venture-capital firms. Since they invest in many startups, the high average return raises their overall median return considerably. However, it's more difficult to justify founding a startup, since the expected median return is 0 and the founders have no diversification of risk. Since the personal value of money diminishes the more one gets, why should founders rely on a small risk of getting super-rich when a large majority of them will fail? It's not like they'll be 100 times as happy if they get 100 times the money of a normal salary.

Startup founders are usually not just in it for the money, but are passionate about solving a certain problem and creating something that can help a large number of people. They may also want to win for its own sake, or desire recognition or power. This may explain why they are pursuing a startup, but it still leaves the money-median issue unsolved. Shouldn't founding a startup make sense financially?

One possible solution would be for startups of similar caliber to set aside some of their stock for a shared startup pool. This way, if one startup in a group is very successful, the founders (and early employees) of the other startups will also get some returns. This will provide startup founders with the same benefits VCs enjoy and give them insurance against their own startup's failure. (In fact, one of the earliest forms of insurance was for the "startups" of ancient times - dangerous maritime commerce trips.)

As long as founders still keep a large stake in their own company, they will still be incentivized to make their own startup succeed. As a simplified example, 20 startups could each set aside 20% of their company for the shared pool. This still leaves 80% of each company for the founders, early employees and investors. If one startup is a big success and sells for $100 million, every other startup will receive $1 million to share between the founders and early employees.1

This will also encourage the group of 20 startups to help each other out, since they will all benefit from each other's success. Startups already receive help from their investors, and this will be a way to encourage collaboration among startup founders.

Currently, startup founders could just agree to swap equity with each other. Once the JOBS Act lets non-rich people invest in startups, founders could sell a few shares in their own startup and buy shares in other startups. Investors buy many different stocks to diversify, founders should be able to get a little "insurance" too.

1. Or everyone gets diluted to half their initial stake and then one company sells for $400 Million, netting $2M to every startup in the group.


The Education Dialog

January 1

Moderator - I'd like to introduce our panelists today - Mr. Mark Carlos, Prof. John Ficht, and Sr. Henry Coates. Each of them (regardless of whether or not they exist) brings a unique perspective on education which will make this discussion interesting. Let's begin!

Do you think there is a problem in Education today?

Mark Carlos
It is of utmost importance for a child to get a good education. But unfortunately there are many obstacles and impediments that prevent children from reaching their potential. Television, the internet and video games cause kids to waste tons of time, and many children lack motivation to study well.

But probably one of the worst impediments to a good education wasn't mentioned. The School System. The overall system doesn't teach students effectively, doesn't teach them the topics they should know or want to know, and is ridiculously inefficient and expensive too. So yes, there is a problem in education today.

Prof. John Ficht
I don't think there is any large problem in education today. There are small improvements that can be made, but overall the system works. Students are taught a structured curriculum, and they go through different levels of school until they have the education that makes them a well-rounded individual and the credentials they need to get good job.

Some have criticized the standard lecture-style of education today. What do you think the role of the lecture is, and should it be changed?

Ficht
I think the lecture model has stood for so long because it is effective. Lectures are effective at transmitting information to students so they have the knowledge they need to be educated and pass tests. Lectures are more dynamic than reading a book, and the professor or teacher can adjust the lecture to fit the students. There is a connection between the teacher and students in a lecture which is essential to education.

Carlos
The lecture is an out-dated system that has very little place in education. It just consists of a teacher repeating the same material as always and writing on a board while students copy it. Why does the professor need to re-say what has been said before? Why do students need to re-write the notes, can't they just be given them? Note-taking is some kind of artificial attempt to get the students involved, but couldn't they been involved on a higher-level than just redundant re-writing? The whole system is one of regurgitation. They regurgitate notes during class, then they regurgitate facts during tests!

Coates
I see Mr. Carlos's point about a lecture with just the teacher talking, but I think there's an important role for discussion in many areas of education. So, if done properly, lectures with discussion are an important way for students to learn.

Can you elaborate more in the role of discussion in education?

Coates
Discussion can be important in many subjects that involve critical thinking that don't have simple binary answers. The teacher needs to be really good at leading the discussion, and the students should be a small group who are on a similar level with each other. It's important for students to be involved in the learning and not just sit passively listening. Carlos, wouldn't you agree to that too?

Carlos
Maybe in theory, but in practice, discussions don't work out. For example, throughout school, much of the discussion time is just students reading a text out loud. All students are doing is regurgitating a text from written to oral form, but there's no thinking happening. Maybe that's the goal of the education system - getting students to regurgitate words between different formats.

Meanwhile, while one student is reading, other students are expected to keep their place with the reader, even if they can read much faster on their own. What is the point in restricting and boring students in such a manner?

Coates
Well that's not really discussion then. In practice, it may be difficult to get classes that are small enough to have good discussions together. An alternative would be to split students up into smaller groups to discuss topics on their own. The teacher wouldn't control the whole discussion, but students can learn a lot on their own and from each other.

In general, do you think there should be more tracking of students by level into different classes?

Ficht
You cannot put people into boxes by assigning them to specific tracks. Everyone should be given equal opportunity to achieve their goals or the the general educational goals. It's better to give everyone the same encouragement and opportunity then to divide them up.

Carlos
People are different from each other, and they should all be allowed to reach their full potential. If some students are struggling in one area, they should be able to get extra help, and not be prevented from it by being at the bottom of a class. If other students can learn more than what's taught in the class, they shouldn't be held back by the average level and pace of the class. Why should the best students be prevented from achieving what they can?

Read Full Post

Programming Bootcamps as an Alternative to Lectures

December 26

tl;dr: Lectures are not an effective way to teach programming, so colleges should offer "programming bootcamps" instead. Either way, students should consider such an option, either for web development or Java.

While many areas of the job market are still weak, one area is growing in demand: Programming[1]. This is because jobs that used to require people can now be done by programs. For example, law students are facing a difficult job market, and one reason for this is because algorithms can now analyze texts instead of lawyers.[2] This trend will continue. Millions of people in the US are employed as drivers, but once algorithms drive better than humans, the humans will need to look for new work. As the tech investor Marc Andreessen said, “software is eating the world”.[3]

One would expect colleges to expand and update their computer science (CS) departments as demand for programming grows. Instead, some universities have downsized their CS departments! They cite weak demand for programming, but that’s because their departments are so weak in the first place! If they would build up their departments, they could attract many bright students. However, they should consider a more bold solution than just hiring more professors.

Most students in Computer Science did not get that much out of the lectures in computers. The best students would usually read or program on their computers during class instead of listening to the lecture. This was independent of the quality of the lecture, but because lectures themselves are not the best way to teach computers or programming. To learn a topic like programming one needs to actively practice it, not passively listen to a lecture. To quote Aristotle:

For the things we have to learn before we can do them, we learn by doing them, e.g. men become builders by building and lyre-players by playing the lyre...

The lecture system[4] has managed to survive the invention of writing and printing, but the internet will “eat” traditional lectures just as its changed other areas. At the very least, software will play a greater role in software education! See The Future of Education[5] for more on this topic; this article will focus on a different aspect.

There’s a traditional Jewish approach to learning that is different from standard lectures - learning with a chavruta, or study partner. It is hard to study complex subjects on one’s own, so it often helps to work with a study-partner. A pair studying alone may also find it difficult to stay focused, which can be solved by joining a group that provides the right environment, structure and support. Colleges think that students learn due to their lectures, but really the environment and structure are the key to learning;  the lecture is often just a distraction.

Recently, some have successfully adopted a study-group-style approach to teaching programming. 'Programming Bootcamps', such as DevBootcamp or AppAcademy, have been popping up all over to teach web development in 2-3 months. Students in these programs often learn more practical programming skills there than they would in 3 years in many colleges. Lectures play a very small role in these programs. Instead, they gather bright students together to code for most of the day, and provide them with structure and help. Students go through online tutorials, and then spend most of the time practicing coding. When they need help or feedback, they have other students or mentors to turn to. This approach has been very successful, and many students have been able to land full-time jobs after graduating from their program.

Academics, when they hear such comparisons, often snort “a college is not a trade school”, we’re not here to teach practical skills! That’s nice, but when you ask most students why they’re attending college, they cite employment as the number one reason.[6] Students aren’t taking out loans just to be “well-rounded” or to “learn to think critically”, and colleges may not help with those things either.[7] If colleges want to remain relevant they will need to adjust their offerings to match what their customers want.[8] 

In theory, colleges could learn from the bootcamps and offer their own “programming bootcamp” for students. The bootcamps could be a block set aside during the day where students code for a few hours straight. Mentors will be there to provide structure and feedback for the students. Motivated students could learn a huge amount in such a structure. In fact, this model could be adopted to other subjects too, and could help save a huge sum of money too.

In practice, most colleges won’t offer such non-standard options, so students should consider such options themselves. There are a number of programming bootcamps that teach web development, and a few recently opened in New York.

If a student is interested in learning Java programming, they should check out an online bootcamp opening in January…

Read Full Post

Aristotle on Learning

December 11

Again, of all the things that come to us by nature we first acquire the potentiality and later exhibit the activity; but the virtues we get by first exercising them, as also happens in the case of the arts as well. For the things we have to learn before we can do them, we learn by doing them, e.g. men become builders by building and lyre-players by playing the lyre; so too we become just by doing just acts, temperate by doing temperate acts, brave by doing brave acts.

Aristotle, The Nicomachean Ethics

Path to Learning Java

December 5

There's a lot of different Java and programming content on Learneroo, so it can be confusing to know what to learn next. I created a quick clickable image to show the order of the different content on Learneroo.


Comments and Chat

October 15

Comments

Stuck on a challenge on Learneroo? You can comment on the bottom of the page to get help. Learneroo staff will especially try to help members solve their problems!

Comments
The comments can be formatted with some markdown and HTML. You can surrond text with **asteriks** to mark it as bold and `that-key-on-the-top-left` to mark it as code. Multi-line code can be marked with 4 spaces:

     if(spacesOnLeft >= 4){
       markAsCode();
     }

The above text will result in:

 if(spacesOnLeft >= 4)){
   markAsCode();
 }

Chat

Online chat is primarily for members to use to get live help, though other users can try it out also. To chat on Learneroo, go to learneroo.com/chat and enter the captcha to connect. This will cause a bunch of text to show up, and then you'll be able to chat. The chat currently uses an ancient technology called IRC (about) and is hosted on freenode. You can also connect to it with an IRC client, such as Xchat on Windows or Colloquy on Mac.

Hours
Learneroo staff will usually be online on
Mondays and Wednesdays
from 3 - 4:00pm and 9:15 - 10pm Eastern Time.

We should be online at other times too, so feel free to check in!


Kickstarter Success, Thank you Backers!

September 3

I ran a Kickstarter Project to help fund the creation of new Java content and it recently ended. Since the project ended, I've published 2 new Java modules:

...and I look for ward to creating more great content. I would like to thank all backers who backed this project and made it a success! Thanks specifically to:

An Extra Thanks to:

  • Kristin E and family
  • Djay Ejay
  • Christian Fletcher Smith
  • and my Parents!

Thanks also to all backers who chose to remain anonymous!


The Java Job Market

July 25

I recently created a module to teach programming with Java to beginners on Learneroo. Why might Java be worth learning? I summarize some reasons in the first Java node. There's another point worth emphasizing, which is the Job Market. A while ago I searched various Job sites for the number of jobs available for each programming language, and Java came out on top of the big sites.

Below are the results from Monster.com for jobs that tagged specific languages as skills. For more information, I created a Google Spreadsheet with job data from different websites.

Monster.com jobs

Here's another chart with US SimplyHired Jobs by in-title search:

simply-hired-us-jobs


The Goals of Learneroo - How I Hope to Improve Online Education

June 23

Why I Started an Edtech Site

I started college 4 years ago, and I decided to major in Computer Science so I could solve challenging problems and create things that could be used by people all over. In college, I found that college lectures did not really teach computer science or math that well and I felt there could be a better way. I wrote some posts and articles about ways to improve education with technology, most of which have been republished on this blog. Recently, I decided to do more than just write about it, and I started Learneroo.com, a site to help people learn technical topics like math and programming. While a few large sites have began offering online courses in the past few years, I feel that a different approach is possible, which I will briefly outline in this post. Since my site is still in a very early stage, I have not yet fulfilled all these ideas, but that means I can still test them out and refine them as I go along.

The Learneroo Difference

While online learning has grown recently, most sites are still focused on simple video content - either of talking heads or scribbling hands. While scribbling on a screen is more visual than a person talking, its still basically the same technology as 10,000 years ago. While there's inherently nothing wrong with this, I think the web can move beyond a lecture-based model and offer more engaging ways to learn.

caveman-teaching-math

The main way people learn the necessary skills in topics like math and programming is not by listening to lectures, but by doing, i.e. by solving problems. Instead of having people listen to a lecture and then go and really learn the topic by solving problems, why not have them learn by solving problems right away? This way, they learn by discovering the ideas "on their own", instead of passively listening to them. This can be both more interesting and lead to a a better understanding.

To make this discovery process easier, difficult concepts can be broken down into small challenges, and the student can learn the full topic as they go through the smaller problems. Each challenge can have some short content that will give students just enough information so they can figure out the solution on their own. If a student needs more help, he or she can click on hints and text popups get through a difficult problem. While skilled teachers may try to get students to discover some material on their own, it is difficult to do this for a large class where different people will grasp different ideas. But by offering challenges with hints and other help, different students will be able to discover the material at their own pace. This is the apporach we will follow at Learneroo.

The Content Itself

The content within each challenge will go beyond simple videos and long static paragraphs of text. Instead we plan to offer interactive text, where different parts can expanded or skipped based on the preference of the user. The printed page only offered one way to be read, but computers do not have to "dictate" what the user must read.

Venn Diagram of Educational Content

As discussed in Less Writing, we will also offer visual charts and diagrams to demonstrate ideas in a more intuitive manner than text alone. We will also develop more advanced interactive features, such as games and formula demonstrators. While these interactive features will be more difficult to implement, they can really help make the learning easier and more fun. (See also the Future of Education).

Toggle More Content

Since our content will mostly be non-videos, it will be easy for students to both skip to the parts they are interested in and quickly reference parts later. Nowadays, people do not need to memorize every detail of a subject, but they need to know the fundamentals and be able to quickly lookup the details. Since our content will be easy to scan, search and reference, it will help the student beyond passing a test and be a resource for them in the future.

The Curriculum

As discussed in a A New Curriculum, we will teach subjects that are important in the modern world, whether they are standard "school" subjects or not. This is some of the content we currently have:

  • Combinations and Permutations - A beginner course to teach a basic topic important to probability.
  • About Programming - This new content will help people find out what programming is, what they should learn, and what resources to use.
  • Sorting Algorithms - An algorithms module for people who know programming basics. This might seem more "standard" than "practical" but it serves as a good example, and we can let students skip it...

Within the subjects themselves, we plan to teach practical skills over "standard" curriculum. For example, computers are widely available for math, so we do not make users solve problems by hand to get numerical math answers. Instead, they just need to figure out the correct formula to give to the computer, and it will check if their answers are correct. (For example, see the Combination Challenge). We will follow similar principles when creating content on computers, physics and other subjects.

Help Wanted

Currently, I need more support to accomplish these goals, so I entered a contest on Elance to win up to $5000 of Elance credit. If you like my idea, please help by voting for my entry. (Update: Contest is now over.)

Also, I am looking for people who can help in the following areas:

  • Javascript and Ruby development
  • Web design
  • Creating educational content.

If you can do any of the above and are interested in helping or cofounding Learneroo, please contact me. I would also appreciate any general feedback, either by email or on Hacker News.


Writing with Less Writing

June 19

This is the final post I'm re-publishing from Zappable (for now).

Ideas discussed:

  • People think all writing needs to be paragraphs, but that's not always the best way to express something.
  • What's the Appeal of Twitter? + Idea for new platform
  • At least include an outline in your article!
  • Bonus: What writing can learn from programming
My chart on learning programming did quite well and got upvoted on Hacker News and Reddit. I realized that one chart was able to encapsulate the important information from 3 previous blog posts. This makes me think there might be too much of a bias to write content in a specific form and style with paragraphs and connecting sentences, when sometimes another form would work better. A chart or diagram can display certain information in a faster and clearer manner than long paragraphs, making the paragraphs unnecessary. Different diagrams and styles can be used for different types of information.

Ways of presenting content

Content Format Good for this type of content Learneroo Example Benefits for reader Extra stuff that get stuck in
Paragraphs of Text Long connected arguments Perhaps previous post Easy linear read Connecting sentences, stylistic phrases
Table Repeated categories of information Resources to Learn Programming Fast to reference Certain cells just to match others in row. (Maybe use NoSQL-style instead ~)
Flowchart Simple decision guide Picking a Programming Language Can quickly reach relevant decisions Random Jokes
Outline-Style Hierarchical content of separate points Attempt below Can easily skip subsections Hopefully nothing

Even if content doesn't fit into a chart, it does not mean that standard paragraphs are necessary. Sometimes an Outline-style could do the trick.

Outline vs. Paragraphs

  • I often start with ideas in note-form before writing a post
  • Before publishing notes, need to refine and clarify ideas.
  • Also includes "textification" into paragraphs, which consist of things like:
    • Keeping to a writing-style (varying words, paragraph format)
    • Putting in filler words to build and connect sentences

  • This turns writing into nice essay, but it can obscure points for both the writer and reader
    • It becomes harder for the writer to revise essay when each change affects the continuity of the sentences and paragraphs. (Maybe writers should also aim for looser coupling!)
    • Certain articles (e.g. academic ones) may be so complicated, readers may feel need to create their own outline or diagram to follow it
  • Notes need to be refined before being published, but they can still be kept in an outline style, with several benefits:
    • Often quicker to write than figuring out how to "textify" content.
    • Easier for reader to follow overall flow of argument
    • Lets reader skip certain sections or examples and still follow argument (In fact, maybe the reader should be able to understand the argument heading without even reading the implementation!)
  • Outline-style can be better for reader and writer, though not sure about this example
Obviously, people know that concise writing or charts are often helpful. However, I think people still feel constrained by standard style expectations. That's why they need things like Twitter and even Powerpoint to permit them to write in shorter form.

Read Full Post

A New Curriculum

June 17

Continued series of posts on education from the Zappable Blog

Summary:

  • The educational syllabus within many subjects should be changed to reflect the changing nature of knowledge.
  • Schools should teach the subjects that are relevant to the information age, and drop some old requirements.

People are Not Hard Drives

The development of computers and the internet has changed the way people can access information and therefore changes the nature of the material people will need to learn. When knowledge was stored in books, perhaps it made sense to require people to memorize large amounts of information. However, since knowledge is now available at the touch of a smartphone (or through speech and glasses), people can easily access the information they need without spending years memorizing information. This information can obviously be much vaster and more up-to-date than anything they could have memorized.

This does not mean that people will not need to learn anything and can just become an instant expert in any field by Googling any issue they have. (Try fixing your car’s transmission based on an eHow guide.) An expert will need a solid understanding of the principles of his field and practice in applying them so that he can correctly draw on database of information to solve a specific issue. This is what students will need to learn instead of memorizing thousands of little details. Perhaps a student training to become a doctor no longer needs to memorize every inch of anatomy. The curriculum of many fields still remains focused on the same material as it did a few decades ago, but it may be time to revise it in light of modern technologies.

People are not Computers

Computers can do much more than just provide access to relevant information. Any problem that can be solved with clearly-defined steps can be programmed so that a computer can solve it. This fact also needs to be taken into account when designing a syllabus of study. Many areas of education involve students learning to mechanically implement set procedures and formulas to solve problems. This is especially true in areas like math, the sciences and math-related areas of business and economics. These mechanical processes can all by definition be solved by a computer, so why pretend that these technologies do not exist? Human computers were once necessary, but they have since been supplanted.

Instead of focusing on being the computer, students should learn how to do the things computers cannot. They should learn how to use the computer tools and learn how to take real-life problems and convert them into a form that computers can solve. Computers are still quite poor at solving general real-life problems unaided by humans, and this is an important skill people will need. Even as computer programs improve, there is always an area where computers cannot solve problems, and people will be needed to work on them. Instead of teaching methods that are no longer needed, the focus of education should be on the areas that are beyond the reach of computers.

This does not mean students should not learn any principles of a subject that a computer can solve. Students who are training to be an expert in a field should learn the basic principles of it so they can fully understand the material and be able to apply it in cases where a specific program does not exist. But it is not necessary for students to memorize a large number of mechanical methods for solving specific problems (without understanding them) when they will anyways just use computers to solve such problems. Plugging something into a formula or into a computer involve about the same amount of understanding, just one way is a million times faster. So perhaps it is not necessary to for high-school students to learn all those formulas and methods. Students should either understand a subject, know how to apply it, or learn what computers cannot solve, but there is no reason to treat them like mechanical computers themselves.

A New Curriculum

New technologies should cause more changes than just modifying the focus of specific subjects. The curriculum of subjects itself should be changed to meet the needs of the times. Besides learning subject-specific computer skills (like using a physics simulation program) students need to learn general computer skills that will allow them to be effective in many different areas.

There are many computer skills that many people do not know well

  • from the most basic (typing)
  • to the advanced (programming).

Since these skills are often extremely useful, they should take precedence in an educational curriculum over less important subjects.

A Simple Example

Typing is obviously one of the most common and useful skills of modern times. People almost never write things by hand anymore, but instead type almost everything. Yet many elementary schools still focus on teaching cursive in 4th or 5th grade! While this was never very useful, nowadays it is completely pointless since no one writes in cursive. Many people never learn how to touch-type correctly and instead use the hunt-and-peck method to type throughout their life (I’m currently using a modified pecking method myself to type this myself). This is probably one of the most basic things that kids should learn when they are younger. There are also simple related topics people should learn, such as keyboard shortcuts, editing basics, and even the purpose of certain keys! (E.g. many people do not know how to move the cursor to the beginning of a line.) These skills are very basic, but learning them can save people thousands of hours.

Read Full Post

The Future of Education

June 12

Intro

This is a lightly edited article of mine from November/December 2011, before the launch of Udacity and Coursera, or the rise of programming bootcamps.

The development of the internet and related technologies has revolutionized many areas of the modern world, from research to shopping. Until recently the educational system remained basically the same, but things are starting to change. New technologies and developments in online education will help make learning less expensive and more effective and enjoyable.

Why Lecture?

Currently, most educational institutions follow a lecture-based learning model. In general, the teacher or professor recites the same lecture each time for every class he or she has on a specific subject. This raises a simple question: why can’t students just watch a video of the lecture?

The purpose of live lectures is to make the class more interactive so students can ask and answer questions while the material is being taught. While that's nice in theory, it is often ineffective in practice. Different students understand different things, and one student’s question might just be an interruption for many other people. Therefore, a student might not ask the question, but then won’t be able to follow what comes afterwards. Perhaps certain subjects could get a discussion-model to work for small, selected groups, but then the per-student cost for the class would be very high.

Videos

What actually happens in many cases is that students sit passively in class for most of a lecture, with little interaction and varied levels of attentiveness. Such a class does not really provide any advantage over a video of the same lecture, which students could watch instead. In fact, once the lecture becomes a video, it can be given once by the best presenter on the topic, and then shown to all future students throughout the world. This model has been particularly successful with Khan Academy, a website with thousands of free videos on various topics. By having the lecture on video, a student can watch at his own pace, and pause, fast-forward or rewind it when necessary. Many students preferred learning from these videos over any other approach.[1]

Khan Academy does not even show any lecturers in its videos, the focus is on the material itself. This might be a little too extreme, since a blackboard can get a bit boring at a certain point. However, educational videos can move beyond such simple graphics and display sophisticated diagrams and visualizations that can make the material clearer and more interesting. For example, the focus of a biology video can be on the actual organ or cell being studied, rather than on a lecturer or blackboard.

Beyond Video

Videos themselves can be useful but they are not the ideal total system to learn new material. They offer little interactivity, and play at a constant rate, ignoring the student entirely[2]. Newer technologies allow the student to go through the material in a more active and engaged manner.

At a simple level, the student can always be required to be answer questions and complete challenges in order to move forward to the next topic. This way, he will always be involved in doing things, not just watching them. The system can quiz him and keeps track of what he knows, so he can be tested on it later. There can also be various gaming elements as students compete for high scores in their topic. Khan Academy has recently begun adding such features to their website, and has reported much success. One could go further than just asking on material that was taught and instead ask challenges that help the student learn new material.

Besides questions, the educational content itself will be much more interactive than a simple lecture, text or video. The student will not just passively watch content, but will be able to manipulate and explore virtual representations and objects. Some topics can be learned through simulations and games where the student will be able to directly partake in the subject material itself. For example, when learning physics, students can play around with a physics simulator to explore how different laws work. They could then be required to complete a virtual activity that requires the correct physical knowledge, such as building a bridge or firing a rocket. This would make the subject more interesting and understandable than current methods.

Issues with Computer-Education

Although computer-based education provides many benefits, there are also some apparent disadvantages that need to be dealt with. When learning a subject it helps to have someone to whom one can ask questions. Googling questions do not always turn up good results, and sometimes one needs specific help with a particular issue. A good online educational system would need to provide ways to get specific help. Some of the content and questions can expandable sections and links that provide more explanation when needed. General questions can be asked in online forums, where other students or experts can answer them. This model has worked well on sites like StackOverflow.com where strangers often give excellent answers to answer to other people’s questions for free. It can definitely work for a group learning a subject online, and there can be experts who review some of the answers or answer the most difficult ones.

Read Full Post

Four Questions about Math Education

June 10

Note: This is a post of mine from a few years ago, lightly edited.

Mathematics is probably one of the most important subjects taught in school, and schools spend a large amount of time on it. But do they teach it in the best manner? This post will ask some basic questions - Why, Who, What & How.

Why teach math?
Its useful in the real world. Its wisdom to appreciate. But how well do are these reasons applied in practice?

Who to teach math to?
Many people barely use or appreciate any of the math they learned after division, so they don’t get much from it. Perhaps such students shouldn't be forced to go through such a educational curriculum for so many years. Of course, an improved system might interest many of them…

What they teach now
I never understood why so much math is taught and learned by hand, when computers have been around for a while. People give many reasons to defend the practice, but they seem to just be justifications to keep things as they are. For example, some people used to say ”What will you do if you don’t have a computer/calculator?” I’m not sure that rare occasion would fully justify spending so many years on hand-based math. Anyways, that reason no longer applies now that smartphones are widespread.
A slightly stronger claim is that true understanding only comes when you do the math on your own without a computer. However, there’s no fundamental difference. People rarely actually understand what they’re doing, they just plug things into formulas they’ve memorized. This means they are just like a mindless computer generating an answer. I bet many people don’t even know why the most basic formulas work, such as multiplication of 2-digit numbers.
In addition, much of the hand-math doesn’t even involve any true understanding, its just techniques to solve things before computers were invented. For example, most of Calculus II is learning unnecessary techniques to solve integrals. There is no reason for so many people to be made to learn such things when they can have silicon “formulas” do the work for them a billion times faster without errors.

What they should teach
I’m not even sure if it's really necessary to teach the understanding of every formula. Mathematicians may want to know such ideas, and it may be important in certain areas for other people. So people should have the option of learning it. But the main thing people should be learning is how to convert real-life situations into math so the computer can solve it. Computers cannot analyze life on their own, and wont be able to for quite some time. Students need to learn how to take questions in life and mathify them. People can focus on the higher-level interesting and useful questions, and let computers do their calculating thing.

For more on this topic, see Conrad Wolfram's talk, which discusses similar issues.

Current Update
On Learneroo, we plan to teach math in a different manner. We will explain clearly and visually how the math works, so people who want to will be able to truly understand it. The point of the challenges on Learneroo will be to formulate the correct formula for a question, not to solve things by hand. In fact, users will usually be able to submit the formula itself as an answer instead of the numerical result. This will save a record of their actual formula and emphasize the focus is on finding this formula, not on hand-calculating it. Programmers do not just program in machine language, they use higher-level languages and libraries. People doing math in the real-world use such tools also, and the education system should not try to restrict it.


Welcome!

May 29

This blog will be all about education, Learneroo, programming and more! Currently, I am blogging from within the Learneroo site itself, and will see if there's any need to switch to a standard blogging platform.

I started blogging at Zappable.com 2 years ago, and a favorite topic of mine was the future of education. Now that I have moved from writing about the topic to actually working on it, I figured I would re-visit some previous posts of mine...


Print Friendly and PDF

Visual Chart

Contact Us