- Abstraction Programming and Education
- Four Questions about Math Education
- The Future of Education
- A New Curriculum
- Writing with Less Writing
- The Goals of Learneroo - How I Hope to Improve Online Education
- The Java Job Market
- Kickstarter Success, Thank you Backers!
- Comments and Chat
- Path to Learning Java
- Aristotle on Learning
- Programming Bootcamps as an Alternative to Lectures
- The Education Dialog
- The Mean, the Median and Startup Equity
- Membership on Learneroo
- Discounts - Satisfaction Guaranteed!
- Lecture Videos and Learning
- Learn Programming by Example and with Challenges
- Java Coding Contest Results
- Coding the Java Explorer
- New - Java Budget Bootcamp
- Java Jobs II
- The Web for All - Kickstarter
- Finding a Web Host and Creating a Site
- Web Development for Entrepreneurs, Marketers and Biz-devs
- Web Development for Non-Developers
- Lessons from my Unsuccessful Kickstarter Project
- Changes on Learneroo
- Learneroo on Reddit and the Powers of 10
- Free Membership for Teachers
- New Algorithms Tutorials
- Free Membership on Learneroo
- Algorithms for Interviews and Jobs
- Interactive Cartoon Guide to Ruby on Rails
- Kickstarter Launched
- Learn Web Development Kickstarter - Q & A
- Ruby on Rails for Web Designers
- Web App Framework vs. CMS vs. Website Builder
- Real Web Development for Entrepreneurs
- What Programming Language Should You Learn?
- Lessons from my Successful Kickstarter Project
- Ruby Coding Contest Live!
- Understanding Recursion
- Ruby Coding Contest Recap
A blog about education. On Learneroo Itself. Blog Home
Abstraction Programming and Education
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?
The Complete Layer
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.)
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.
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. Not saying he would necessary agree with my application.
Interested in learning the essential principles and practical aspects of web development? Check out my Kickstarter!